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这一“临时对象”,然后将该“临时对象”析构。