为什么构造函数只有一次,析构两次呢
#include <iostream>
using namespace std;
class A
{
public:
int data;
A(){cout<<"default"<<endl;}
A(int i):data(i){cout<<"int i construct"<<endl;}
A& operator=(A &temp){data = temp.data; return *this;cout<<"copy construct"<<endl;}
~A(){cout<<"xigou"<<endl;}
};
A play(A a){return a;}
void main()
{
A temp = play(5);
}
结果:
int i construct
xigou
xigou
[解决办法]
参考下面的代码:
- C/C++ code
#include <iostream>using namespace std;#include <iostream>using namespace std;class A{public: int data; A(){cout<<"default"<<endl;} A(int i):data(i){cout<<"int i construct"<<endl;} // 增加的Copy Constructor A(const A& a) { data = a.data; cout << "copy constructor" << endl; } A& operator=(A &temp){data = temp.data; return *this;cout<<"copy construct"<<endl;} ~A(){cout<<"xigou"<<endl;}};A play(A a){return a;}void main(){A temp = play(5); // play(5)会调用constructor, 将play(5)产生的对象赋给temp,会调用Copy // Constructor}