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;