C++ 构造函数,赋值构造函数,析构函数,赋值构造函数的调用次序

本文详细解析了C++中匿名对象的使用、参数传递方式及其对析构顺序的影响,包括优化前后参数处理的区别,以及内部变量析构顺序与声明顺序的对应关系。通过具体代码实例,阐述了C++内存管理机制的微妙之处。

一、如果参数是被优化之后出入的也就是,没有经过复制构造函数,那么最后会将其当做这个函数的一个内部的局部变量。举个例子

Class A{}

 fun(int i,A a){

  return 1+a;//这里不会调用赋值构造函数,因为是匿名对象

}

 

fun(1,A())//A()传入时不会调用复制构造函数,因为是你们对象

调用为:

constructor A;

constructor (A+1);

deconstructor A;

deconstructor (A+1);

 

二、如果没有进行优化会将参数作为一个外部的变量的引用,如果返回值是一个匿名对象,那么这个参数的析构会晚于这个匿名对象

fun(1+A(),2)

调用为:

constructor A;

constructor (A+1);//这里的(A+1)有点类似一中的A,因为实际上两者都是匿名对象

constructor (A+1)+2;

deconstructor (A+1);

deconstructor (A+1)+2;

deconstructor A;

 

三、函数内部的变量的析构次序,和声明的次序是对称的。

首先生命的最后析构

void fun(){
    A a=A(2, 2);
    A b=A(2, 3);
}

调用为:

constructor a;//这里的(A+1)有点类似一中的A,因为实际上两者都是匿名对象

constructor b;

deconstructor b;

deconstructor a;

 

转载于:https://www.cnblogs.com/deepblueme/p/4588032.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值