默认拷贝构造函数是浅拷贝。
struct A
{
public:
A(int n)
{
num=n;
name=new char[5];
cout<<"construct function"<<endl;
}
~A()
{
cout<<"deconstruct function"<<endl;
delete name;
name=NULL;
}
private:
int num;
char *name;
};
struct A a;
struct A b(a);
第一个a在构造函数中为name开辟了存储空间
第二个b通过默认拷贝构造函数将a的内容复制过来,为什么是浅拷贝,因为它只是复制了num和name的存储空间,新的name中的指向地址依然是第一个a的构造函数中开辟的内存空间。b的name并没有开辟属于自己的空间,所以在a和b在调用析构函数时,都执行了释放掉name所指向空间的命令,把该空间释放了两次。
但是在dev c++上不会报错,验证后发现两次delete同样的指针并不会报错,但是可能会产生对程序不好的影响
所以在拷贝含有指针的成员时,要重写拷贝构造函数,进行深拷贝。