目前位置: VCer资源中心 >>> VCer论坛 >>> 技术问答

[本帖已阅读1511次 分值2 回复2次] 张贴资源 发回信箱 控制面板

奇怪的Constructor,CopyConstructor&Destructor

提供者:barco 张贴时间:2004-05-21 12:58:14.0 出处:vcer.net 作者:不祥

奇怪的Constructor,CopyConstructor&Destructor(2004-05-21 12:58:14.0)


巴壳


 
级别: VCer小兵
头衔: VCer会员

经验: 462
作品: 15
分会: 华中分会
注册: 2004-05-13 22:18:24.0
登录: 2004-07-22 21:24:52.0

问题在附件里,请大家看看,很奇怪的!!!(附件说明:结果一是就这样运行的结果,结果二是把程序中有星号的注释行里,被注释掉的析构函数开,即加了个析构函数!)

 

注:转载文章需注明来源:VCer.net 文章地址:http://vcer.net/2253.html

  如果你觉得VCer.net不错,而且你愿意为VCer.net捐赠一元钱,那么点击后面的捐赠按钮吧:) vcer.net捐赠

[回复该贴] [加入个人书签]

re:奇怪的Constructor,CopyConstructor&Destructor

从语义上考虑,operator+与 operator-中均需调用copy constructor以构造参数c1、c2,函数中会construct一个temp object存放运算结果,函数退栈时将此temp object的值copy construct储存于函数的返回值(return value)中,再由函数的返回值赋值给c3。

这就是结果一有“copy constructor”的原因。

对于返回值对象的函数,c++允许编译器执行RVO优化。对于operator+与 operator-执行RVO优化,则函数会在return value上直接construct运算结果,优化掉了函数中temp object。

加上destructor,complier 认为有了优化的必要,从而结果2无“copy constructor”。

ccmz 于 2004-06-03 10:48:47.0 编辑 [回复该贴]

re:奇怪的Constructor,CopyConstructor&Destructor

同问!!

拷贝函数在三种情况下调用

1:用一个对象初始化另一个对象;

2:对象作为参数传递给一个函数;

3:当一个函数返回一个对象的时候;

为什么没有析构函数时返回的时候能够调用显示的拷贝构造函数

难道有析构函数的时候没有调用显示的拷贝构造函数?

这时是调用隐式的拷贝构造函数吗?

所以楼主的现象颇令人疑惑.望知情者告知.欢迎讨论了,谢谢!

vcnovice 于 2004-06-01 20:59:33.0 编辑 [回复该贴]