C++构造与析构

今天看了下Qt编程,顺便查了下C++的构造与析构,看到网上有一篇测试的文章,自己在linux也试了下,不过结果还是和在windows下有些区别的,具体原因我也没有深入研究。

具体代码如下:

 执行结果如下:

Demo default ctor. method., objName = Default object.
Enter testMethod1.
Demo(int ival) ctor method,i = 1, objName = d in testMethod1
Exit testMethod1.
Demo dector. method, i = 1, objName = d in testMethod1
Enter testMethod0.
Demo(int ival) ctor method,i = 0, objName = d in testMethod0
Exit testMethod0.
Demo dector. method, i = 0, objName = d in testMethod0
Demo(int ival) ctor method,i = 999, objName = d1
Enter testMethod2.
Demo(int ival) ctor method,i = 2, objName = d in testMethod2
Exit testMethod2.
d.i = 1
d1.i = -1
d2.i = 999
d3.i = 2
Demo dector. method, i = 2, objName = d in testMethod2
Demo dector. method, i = 999, objName = d1
Demo dector. method, i = 1, objName = d in testMethod1
在进行对象声明的时候也调用了一个默认构造函数,在调用方法0和方法1时,内部创建的对象都是临时的,在退出相对应的函数的时候对象就析构了,d和d1应该是指向被析构的对象,不过奇怪的是,它们最好输出的值居然是正确的,在网上那篇文章中,说在d = testMethod1();  发生了拷贝操作,但我们这里没有出现,不过在编译这个文件的时候倒是说“warning: reference to local variable ‘d’ returned”,好像是说引用了局部变量d,难道说类的声明也仅仅是一个引用,只有在 testMethod2();  使用了指针对指向了新的对象,这个对象没有被自动析构,不过使用指针引用对象的话需要自己对对象进行删除。

看输出结果发现明明发生了5次析构,刚好也是发生了5次构造,但是没有发现默认构造的对象被析构,d in testMedthod1倒是析构了两次,怪异,总感觉又一次是析构默认创建的对象,不过又找不到依据。

使用 Demo d = testMethod1();的方式倒是可以防止默认析构。

看来以后使用c++还是有些问题需要注意。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值