对临时对象的一点思考
2007-06-22 16:23
141 查看
在一个块作用域或者函数体内的临时变量(非指针),例如
C1 f()
{
C1 c;
return c;
}
此时返回值是个临时变量,不是c,而是C1(c)构建的一个临时变量
C1& f()
{
C1 c;
return c;
}
此时返回值是一个refernce故非临时变量,是对变量c的一个引用,而由于c的作用域已经结果即c已经消亡,故该reference是未定的一个对象,故此写法不合适
在完面调用时
C1 c=f(),则产生两个C1对象,第一个为函数返回值生成的临时对象,第二为C1(临时对象生成)建立的c
C1& c=f(),则产生一个C1对象,即一个临时对象
//////////////////////////////////////////////////////////
在vc的stl中vector,要产生一个临时对象,在vecotr.push_back内部
例如vecotr.push_back(T(argument)),T(argument)生成一个对象,在vecotr.push_back内部T _tmpr=val语句产生一个对象,最后在vecotr.push_back的new操作附生成一个对象,好像中间那个对象有点多余
,在函数void _Insert_n(iterator _Where, size_type _Count, const _Ty& _Val)中,有一语句_Ty _Tmp=_val
在linux的stl中vecotr,用的是g++,对于上面的例子只产生两个对象,第一个为T(argument),第二个new产生
C1 f()
{
C1 c;
return c;
}
此时返回值是个临时变量,不是c,而是C1(c)构建的一个临时变量
C1& f()
{
C1 c;
return c;
}
此时返回值是一个refernce故非临时变量,是对变量c的一个引用,而由于c的作用域已经结果即c已经消亡,故该reference是未定的一个对象,故此写法不合适
在完面调用时
C1 c=f(),则产生两个C1对象,第一个为函数返回值生成的临时对象,第二为C1(临时对象生成)建立的c
C1& c=f(),则产生一个C1对象,即一个临时对象
//////////////////////////////////////////////////////////
在vc的stl中vector,要产生一个临时对象,在vecotr.push_back内部
例如vecotr.push_back(T(argument)),T(argument)生成一个对象,在vecotr.push_back内部T _tmpr=val语句产生一个对象,最后在vecotr.push_back的new操作附生成一个对象,好像中间那个对象有点多余
,在函数void _Insert_n(iterator _Where, size_type _Count, const _Ty& _Val)中,有一语句_Ty _Tmp=_val
在linux的stl中vecotr,用的是g++,对于上面的例子只产生两个对象,第一个为T(argument),第二个new产生
相关文章推荐
- java中集合存储对象的问题的一点思考
- 小问题大思考之C++临时对象
- 关于对象之间通信的一点思考
- 关于ORACLE通过file_id与block_id定位数据库对象遇到的问题的一点思考
- 关于对象之间通信的一点思考
- 由无名对象(临时对象)引发的关于“引用”的思考
- MFC中动态创建对象的一点思考
- 面向对象与面向过程的一点思考
- 小问题大思考之C++临时对象
- 关于C++中在函数中按值返回、临时对象、拷贝构造函数的一点理解
- 转:由无名对象(临时对象)引发的关于“引用”的思考
- C# 类型、对象、方法执行时的相互关系的一点思考
- 小问题大思考之C++临时对象
- c#Winform程序调用app.config文件配置数据库连接字符串 SQL Server文章目录 浅谈SQL Server中统计对于查询的影响 有关索引的DMV SQL Server中的执行引擎入门 【译】表变量和临时表的比较 对于表列数据类型选择的一点思考 SQL Server复制入门(一)----复制简介 操作系统中的进程与线程
- jQuery源码学习一:对jQuery对象的一点思考
- MFC中动态创建对象的一点思考
- 关于对象之间通信的一点思考
- 神秘的临时对象
- 有关DOM XSS的一点思考
- 面向对象整体机制的思考(什么事面向对象)