构造与析构

ParentA func() {
        ParentA  a;	return a;//先 拷贝构造a -------------(1)      ;(2)----------- 接着析构a(非拷贝构造的a,而是上一句的a)
}
ParentA tmp;//调用默认构造函数构造tmp
tmp=func();// 调用赋值=构造函数,把(1)中拷贝构造的a 赋值给tmp,接着拷贝构造的a立马析构
ParentA tmp2=func();// tmp2 接管(1)中拷贝构造的a,不会析构 拷贝构造的a

tmp=func();//调用赋值=构造函数,把(1)中拷贝构造的a 赋值给tmp,接着拷贝构造的a立马析构
ParentA
tmp2=func();// tmp2 接管(1)中拷贝构造的a,不会析构 拷贝构造的a,析构tmp2就是析构 拷贝构造的a,这一句比上一句少调用一次赋值构造函数,少调用一次析构

ParentA& func2() {
        ParentA  a=new ParentA();//	----------(1)构建堆上的a,没有析构释放内存
		return *a;// 不会拷贝构造 a 的副本,就把a的引用返回,不会有构造函数调用
}
ParentA tmp1;//调用默认构造函数构造tmp
tmp1=func2();// 调用赋值=构造函数,把(1)中的a 赋值给tmp1,由于a是堆上的所以无法立马析构
ParentA &tmp2=func2();// tmp2 接管(1)中堆上的a,不会有构造函数调用
ParentA tmp3=func2();// 拷贝构造函数利用a的引用,构造tmp3.但是a在堆无法释放
ParentA tmp1;//调用默认构造函数构造tmp
tmp1=func2();// 调用赋值=构造函数,把(1)中的a 赋值给tmp1,由于a是堆上的所以无法立马析构
ParentA &tmp2=func2();// tmp2 接管(1)中堆上的a,不会有构造函数调用
ParentA tmp3=func2();// 拷贝构造函数利用a的引用,构造tmp3.但是a在堆无法释放

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值