1.深拷贝与浅拷贝
如果一个类包含指针形式的成员变量,系统提供的缺省拷贝构造函数,只是复制了指针成员变量本身,而没有复制该变量所指向的内容,这种拷贝方式被称为浅拷贝。浅拷贝将导致不同对象间的数据共享,同时会在析构函数中引发”double free”异常。为此就必须自己定义一个支持复制内容即深拷贝的拷贝构造函数。
2.类的缺省拷贝赋值
类的缺省拷贝赋值同样对于基本类型成员变量按字节复制,因此和缺省拷贝构造函数一样,是浅拷贝。为了得到深拷贝的赋值效果,就需要自己定义一个支持深拷贝的拷贝赋值运算符函数。
1)防止自赋值
2)分配新资源
3)释放旧资源
4)复制新内容
5)返回自引用
6)复用拷贝构造和析构
3.忠告和建议
1)尽量避免是指针形式的成员变量;
2)尽量避免拷贝构造和拷贝赋值;
3)如果拷贝构造支持深拷贝,那么拷贝赋值就也应该支持深拷贝,反之亦然。
4)处于具体原因,确实无法实现深拷贝的拷贝构造和拷贝赋值,可以将拷贝构造函数和拷贝赋值运算符函数声明为私有函数,禁止用户使用。