您的位置:首页 > 编程语言 > C语言/C++

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

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

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: