拷贝构造函数的深拷贝与浅拷贝的条件:构造函数中有没有动态申请空间!动态申请空间,浅拷贝会二次析构同一地址,出错,这时就要深拷贝,就不会错了!
#include<iostream>
#include<assert.h>
using namespace std;
class Rect
{
public:
Rect()
{
p = new int(100); //为指针申请空间
}
Rect(const Rect& r) //拷贝构造函数
{
width = r.width;
height = r.height;
p = new int(100); //为指针申请空间与原空间区别
*p = *(r.p); // 拷值
}
~Rect()
{
assert(p != NULL);
delete p; //删除指针,二个空间不同的地址
// p=NULL; //感觉要加上
}
private:
int width;
int height;
int* p;
};
int main()
{
Rect rect1;
Rect rect2(rect1);
return 0;
}
本例子出于网络,出处不可考!感谢原作者!