LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 728|回复: 3

函数返回的对象在什么时候消失?

[复制链接]
发表于 2005-9-24 10:02:06 | 显示全部楼层 |阅读模式
假如这样写

  1. class A
  2. {
  3. ....
  4. };

  5. A c()
  6. {
  7.   return A();
  8. }
  9. main()
  10. {
  11.   A     aaa;
  12.   aaa = c();

  13. }
复制代码


调用函数c返回的似乎是一个临时对象,那么这个对象什么时候消失?是在赋值那一行结束之后消失,还是在赋值所在的逻辑块结束之后消失?还是在整个程序结束后消失?
发表于 2005-9-24 10:59:15 | 显示全部楼层
哇,这个问题可很有渊源啊!可以参考一下D&E(The Desing and Evolution of C++),书中Bjarne详细介绍了这个问题的历史和发展,具体参见6.3.2。

最后的结论是EOS(End Of Statement),”这样EOS就变成意味着‘完整表达式的结束’,而所谓完整表达式就是说它不在是其他表达式的子表达式了”。

你这个例子就是

  1. aaa=C();
复制代码

之后
回复 支持 反对

使用道具 举报

发表于 2005-9-24 14:51:09 | 显示全部楼层
<inside c++ object model> 中也有介绍。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-24 16:39:51 | 显示全部楼层
恩,刚才写了个class测试了一下,确实是如此。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表