解析局部对象与临时对象

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值