类中有默认的复制构造函数,或者是自己定义的复制构造函数,那么对于下面一段代码
#include<iostream>
using namespace std;
class Fun
{
public:
Fun(int rx):x(rx){}
Fun(Fun &fun);
private:
int x;
};
Fun::Fun(Fun &fun)
{
x = fun.x;
}
int main()
{
P...
return 0;
}
如果说定义了一个变量
Fun funa(12);
Fun funb=funa;//此处调用了复制构造函数,此处funb的x是funa的x的引用,即funa.x与funb.x存的数在同一个内存块内。
#include<iostream>
using namespace std;
class Fun
{
public:
Fun(int rx):x(rx){}
Fun(Fun &fun);
private:
int x;
};
Fun::Fun(Fun &fun)
{
x=new int;
x=fun.x;
}
int main()
{
P...
return 0;
}
而这样的话funa和funb的x就不在同一地址,那么此时在析构函数中,两个类就会分别处理不同内存中的两个数据,不会报错。