解析局部对象与临时对象
2016-07-27 11:06
363 查看
http://blog.csdn.net/lujiandong1/article/details/42195595
没有名字的对象就是临时对象,它存在于完整的表达式的生存其间。也就是说,当表达式计算结束后就会被释放。一个例外是,当临时对象被引用时,它的生存期将延长到与这个引用的生存期一样长。
局部对象就是可见区域在一个函数范围的对象。
局部对象有两种,静态局部对象的生存期起于所在函数第一次被调用,结束于main()函数退出之后。自动局部对象生存期起于所在函数每一次被调用,结束于函数返回。
A fun()
{
return A();//创建一个A的临时对象并返回。这个临时对象将被拷贝给调用者的临时对象,然
后释放(在进行了RVO时不创建临时对象,而是直接构造调用者的临时对象)。
}
A a;
a = fun();//调用fun,产生一个临时对象;用这个临时对象为参数调用a的拷贝赋值操作符,然释放临时对象。
const A b& = fun();//调用fun,产生一个临时对象,这个对象并不会马上被释放,而是会在离开b的作用域后释放,因为它被b引用了。
临时对象
临时对象是看不见的,不出现在源代码中。通常两种条件下会产生:
1为了使函数成功调用而进行的隐式类型转换
2 函数返回对象时
在任何时候只要见到常量引用(reference to const)参数,就存在建立临时对象而绑定在参数上的可能性。
在任何时候只要见到函数返回对象,就会有一个临时对象被建立
局部对象
静态局部对象:在首次进入到定义该静态对象的函数时,进行构造,存放在全局数据区,其生命期与程序的运行生命期相同。
局部对象:在函数开始执行时,按出现的顺序统一定义,存放在栈中,其生命期同函数的生命期。
class A { -----}
A get () { A a;
return a;
};
对象a分配在栈中,函数返回时已经析构,是不可返回的。因此需要创建“临时对象”。
2.在函数的调用者接收了函数返回的“临时对象”时,如果是作为引用接收的,此时该“临时对象”即转变为“永久对象”,不再析构。如果是作为非引用接收,则c++将再创建一个copy对象copy这一“临时对象”,然后将该“临时对象”析构。
没有名字的对象就是临时对象,它存在于完整的表达式的生存其间。也就是说,当表达式计算结束后就会被释放。一个例外是,当临时对象被引用时,它的生存期将延长到与这个引用的生存期一样长。
局部对象就是可见区域在一个函数范围的对象。
局部对象有两种,静态局部对象的生存期起于所在函数第一次被调用,结束于main()函数退出之后。自动局部对象生存期起于所在函数每一次被调用,结束于函数返回。
A fun()
{
return A();//创建一个A的临时对象并返回。这个临时对象将被拷贝给调用者的临时对象,然
后释放(在进行了RVO时不创建临时对象,而是直接构造调用者的临时对象)。
}
A a;
a = fun();//调用fun,产生一个临时对象;用这个临时对象为参数调用a的拷贝赋值操作符,然释放临时对象。
const A b& = fun();//调用fun,产生一个临时对象,这个对象并不会马上被释放,而是会在离开b的作用域后释放,因为它被b引用了。
临时对象
临时对象是看不见的,不出现在源代码中。通常两种条件下会产生:
1为了使函数成功调用而进行的隐式类型转换
2 函数返回对象时
在任何时候只要见到常量引用(reference to const)参数,就存在建立临时对象而绑定在参数上的可能性。
在任何时候只要见到函数返回对象,就会有一个临时对象被建立
局部对象
静态局部对象:在首次进入到定义该静态对象的函数时,进行构造,存放在全局数据区,其生命期与程序的运行生命期相同。
局部对象:在函数开始执行时,按出现的顺序统一定义,存放在栈中,其生命期同函数的生命期。
class A { -----}
A get () { A a;
return a;
};
对象a分配在栈中,函数返回时已经析构,是不可返回的。因此需要创建“临时对象”。
2.在函数的调用者接收了函数返回的“临时对象”时,如果是作为引用接收的,此时该“临时对象”即转变为“永久对象”,不再析构。如果是作为非引用接收,则c++将再创建一个copy对象copy这一“临时对象”,然后将该“临时对象”析构。
相关文章推荐
- 封装好的Folyd建图,C++源码
- matlab与c/c++混合编程
- matlab与c/c++混合编程——c/c++调用matlab
- C/C++常用的调试宏
- VC内存泄露检查工具:VisualLeakDetector
- 内联函数总结
- usb体系结构
- VC结构体实现类似数组的下标操作符功能
- C/C++ 嵌套结构体动态内存管理实现
- C++调用gSoap编写的WEBSERVICE与C#.NET间接口自定义结构体不能重复使用
- 处理VC开发的webservice在C#.NET中中文乱码问题
- gcc使用入门
- C/C++ Linux 程序员必须了解的 10 个工具
- 递归遍历数组
- 用C/C++打印*号图案
- C++之四书五经(上)
- C++中const的使用
- *p++和*++p的区别
- C/C++输入读取数据函数总结
- 不可表示的数(庞果网)完全解答