F_G

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

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;

 

posted on 2015-06-19 11:02  F_G  阅读(299)  评论(0编辑  收藏  举报