c++构造函数和析构函数的调用顺序,乱拉直接
#include<iostream>
using namespace std;
class Compute
{
public:
Compute (int);
Compute (Compute &);
~Compute()
{
cout<<"Destructor=>"<<a<<endl;
}
private:
int a;
};
Compute::Compute(int x)
{
a=x;
cout<<"Constructor=>"<<a<<endl;
}
Compute::Compute(Compute &x)
{
a=x.a; cout<<"A=>"<<a<<endl;
}
Compute compute(Compute);
int main()
{
Compute c1(1);
Compute c2=compute(Compute(2));
c1=compute(c1);
return 0;
}
Compute compute(Compute x)//为什么这个返回值是Compute的函数建立形参时调用构造函数时是调用Compute (Compute &);,不是Compute (int)?????
{
return x;
}
运行结果是,从第四行就迷糊啦,请求解答。。。。。。
[解决办法]
结果是:
Constructor=>1 //Compute c1(1);
Constructor=>2 //compute(Compute(2));中的Compute(2)这个临时对象
A=>2 // Compute c2=而引起的调用拷贝构造
Destructor=>2 //compute(Compute(2))中临时对象的析构
A=>1 //compute(c1) 中c1拷贝个临时参数
A=>1 //c1= 引起的拷贝构造
Destructor=>1 //compute(c1) 中c1拷贝个临时参数的析构
Destructor=>1 //c1= 引起的拷贝构造
Destructor=>2 //c2的析构
Destructor=>1 //c1的析构
[解决办法]
http://hi.baidu.com/qiaolw/blog/item/e60a8dc52ff337c8d00060cf.html
[解决办法]
compute(Compute(2));调用时的执行过程是先生成一个对象Compute(2),然后将生成的对象拷贝给compute函数的形参,需要调用复制构造函数。