拷贝构造函数:首先是一个构造函数,特殊在只有一个参数且用对象的引用作参数(规定),函数体是一些赋值语句
浅拷贝:对对象中的数据成员简单赋值,默认拷贝就是浅拷贝,分系统默认和手写的
深拷贝:对象存在动态成员,也就是自己在堆中申请了一块内存空间(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