免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4680 | 回复: 0
打印 上一主题 下一主题

[C++] 等号赋值的对象为什么销毁不调用析构函数呢? [复制链接]

论坛徽章:
0
1 [报告]
发表于 2013-05-07 18:24 |显示全部楼层
LZ,在你说结果的时候,应该附上你所使用的编译器。

我的分析如下
----------------------------------------------------------
main调用的如果是
1    Stock myStock=2;
2   myStock=Stock("a",1.0);
3   myStock=Stock("abcde",3.0);

with param constractor                     -> 由1产生,此处并未产生临时变量。
with param constractor                     -> 由2Stock("a",1.0)产生,由于这里Stock("a",1.0),是一个临时变量,所以会有一个对应的析构
destory stock name:a ByeBye!          -> 2处对应的析构
with param constractor                     -> 同上面的道理,由3Stock("abcde",3.0)产生,同理是一个临时变量,所以会有一个析构
destory stock name:abcde ByeBye!  -> 3处对应的析构
destory stock name:abcde ByeBye!  -> 由1处产生,因为程序结束,所以myStock会调用析构,并且此时myStock中的m_name,已经被第3行的调用修改,所以也显示为abcde

----------------------------------------------------------
main调用的如果是
1    Stock myStock=Stock("a",1.0);
2    myStock=2;
3    myStock=Stock("abcde",3.0);

with param constractor
destory stock name:a ByeBye!
with param constractor
destory stock name:defautl name ByeBye!
with param constractor
destory stock name:abcde ByeBye!
destory stock name:abcde ByeBye!

析构函数调用四次!这个2对象被销毁了。
那为什么第一个不销毁那个2对象呢?

这个应该是错误的,构造的次数应该和析构的次数是成对的
我的结果如下 (g++ (GCC) 4.5.2)
with param constractor                                             
with param constractor
destory stock name:defautl name ByeBye!
with param constractor
destory stock name:abcde ByeBye!
destory stock name:abcde ByeBye!
原因同上面的分析。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP