-
先说拷贝构造函数
是公有函数,用于创建对象时使用同类对象来初始化新对象
用法:类名 + (const 类名& 对象名)
特征:是构造函数的重载、单参、必须传对象的引用否则会一直递归下去、如果没有显式定义则编译器会默认生成
-
浅拷贝
对于拷贝构造函数,如果不显示给出则编译器默认给出,但是编译器给出的拷贝构造函数进行的仅仅是值拷贝(位拷贝)
一般情况下,浅拷贝没有问题,但如果有指针成员还用浅拷贝的话就会出错。见名知意,拷贝拷贝,对于指针成员,也是拷贝,不过仅仅是复制了另一个指针指向相同的资源,可能有人会想两个指针指向同一块资源怎么了,没问题啊。但是别忘了构造函数操作的是对象,对象是构造出来的,那用完了就必然得销毁,销毁就要调用析构函数,析构的时候用一块地址被释放两次能不出错吗?
-
深拷贝
深拷贝与浅拷贝的区别是在拷贝的时候不仅拷贝了值,还将资源也拷贝一份,这样就不会出现上面的情况。但是深拷贝必须由自己来实现
Test(const char& A){
a = A.a;
str = new char[a];
if(!str){
strcpy(str, A.str);
}
}