拷贝构造函数:首先是一个构造函数,特殊在只有一个参数且用对象的引用作参数(规定),函数体是一些赋值语句
浅拷贝:对对象中的数据成员简单赋值,默认拷贝就是浅拷贝,分系统默认和手写的
深拷贝:对象存在动态成员,也就是自己在堆中申请了一块内存空间(C++中用new申请)一定是自己写的:对一些放在栈中的成员变量(普通变量)赋值,手动申请一个和构造函数中手动申请的一块内存空间(堆中)相同大小的内存空间并赋值。
例如:深拷贝
#include<IOSTREAM.H> class Rect { public: Rect() // 构造函数,p指向堆中分配的一空间 { p = new int(100); } Rect(const Rect& r) { width = r.width; height = r.height; p = new int; // 为新对象重新动态分配相同大小的空间,只是它的值不一定是100 *p = *(r.p);//赋值 } ~Rect() // 析构函数,释放动态分配的空间 { if(p != NULL) { delete p; } } public: int width; int height; int *p; // 一指针成员 }; int main() { Rect* rect1=new Rect; Rect rect2(rect1); // 复制对象 cout<<(rect1.p)<<" "<<(rect2.p)<<endl;//输出100 100 说明对象rect1 ,rect2一样 return 0; }
原文:http://lyunfan.blog.51cto.com/6649420/1367811