C++临时对象生存周期

lw1a2 2007-10-09 09:35:52
《深度探索C++对象模型》P275上说:

如果一个临时性对象被绑定于一个reference,对象将残留,直到被初始化之reference的生命结束,或直到临时对象的生命范畴(scope)结束——视哪一种情况先到达而定。

这里的“reference的生命结束”和“临时对象的生命范畴(scope)结束”有什么区别?感觉说的是一样的。谁能针对这两种情况,举两个例子?



还是说只要临时对象绑定到引用了,则临时对象的析构就发生在引用的生命结束时?
...全文
569 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iambic 2007-10-10
  • 打赏
  • 举报
回复
cout  << f(A())  << f(B())  < < endl;

这一句中,临时对象的const引用在f的参数上(而不是返回值)。这个引用在f()返回的时候就结束了,但是临时对象未必销毁。
iambic 2007-10-10
  • 打赏
  • 举报
回复
“reference的生命结束”

const A& a = B();

“临时对象的生命范畴(scope)结束”

cout << f(A()) << f(B()) << endl;
lw1a2 2007-10-10
  • 打赏
  • 举报
回复
To ugg :
你说的第二种情况,不是临时对象绑定到引用的情况吧

To ckt1120 :
我是感觉他说的后半句不对。查了C++标准,对引用这种情况,并没有他说的那种情况
dabang_007 2007-10-10
  • 打赏
  • 举报
回复
A& ra = A();---
-----------------------------这个不对吧?应该是const绑定吧?
const A& ra = A();
jixingzhong 2007-10-10
  • 打赏
  • 举报
回复
通常认为临时对象在它所在的语句执行完毕后会立即释放
ckt 2007-10-09
  • 打赏
  • 举报
回复
个人看法拿这个例子
A& ra = A();
ra初始化完成,临时对象的生命周期就结束了
但是引用ra的声明周期还没有结束


只要临时对象绑定到引用了,则临时对象的析构就发生在引用的生命结束时?
---------
如果这样的话,
直到被初始化之reference的生命结束,或直到临时对象的生命范畴(scope)结束
这句话的后半部分就没意义了
逸学堂 2007-10-09
  • 打赏
  • 举报
回复
从这个角度考虑不知道对不对
1:直到被初始化之reference的生命结束,这种情况的应用应该在
void fun(const string& str)
调用的时候fun("abcd"),这个时候,在函数fun内,str就是字符串"abcd"构成临时对象的reference,
当str生命结束时,这个对象销毁
2:或直到临时对象的生命范畴(scope)结束
这种情况
string fun();
当调用string str = fun();后,函数返回的临时对象销毁
cnvb 2007-10-09
  • 打赏
  • 举报
回复
#include <iostream.h>

int& myFunc()
{
int i = 10;
return i;//原则上i到这里生命就结束.但是return语句把它返回给了一个引用型.所以i在这里并没有被立即销毁.
}

int main()
{

int& x = myFunc();//这里引用型int变量x得到了函数返回的对局部变量i的引用.
cout << " x = " << x << endl;
return 0;//原则上main函数的局部变量x在这里被销毁.因为引用绑定的原因myFunc函数的局部变量i此时才随着x的销毁被销毁.
}


以上是小生的理解.不知对不对....
lddLinan 2007-10-09
  • 打赏
  • 举报
回复
Class A;

A();--->create a temperary object with lifetime ended after the expression.
A& ra = A();--->bind a reference to the temperary object which make the temperary object alive until the reference leave the its scope of lifetime.

65,184

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧