在C++的深浅拷贝中,都是对对象的拷贝问题,只是在面对资源申请的时候,需要比较重视这个问题,因为这涉及到内存泄漏、多次析构的问题等。
1、浅拷贝。
对于浅拷贝来说,就是字节的拷贝,那如果在有资源申请和管理的时候,同一块空间可能存在析构两次的问题(两个对象共用同一块空间的问题),或者在改变一个对象的时候,另外一个对象也会被改变,例子:
class NEW
{
public:
NEW()
:_p(new int)
{
*_p = 10;
}
~NEW()
{
if (_p)
{
delete _p;
_p = nullptr;
}
}
void change_p(int num)
{
*_p = num;
}
private:
int* _p;
};
int main()
{
//浅拷贝
NEW n1;
NEW n2;
n2 = n1;
n1.change_p(20);
//写了析构函数,这块空间还会被析构两次
return 0;
}
2、深拷贝。
对于深拷贝来说,也会拷贝成员,但是拷贝后的对象管理的空间都是独立的,例子
:
class NEW
{
public:
NEW()
:_p(new int)
{
*_p = 10;
}
NEW& operator=(const NEW& n)
{
if (this!=&n)
{
_p=new int;
}
return *this;
}
~NEW()
{
if (_p)
{
delete _p;
_p = nullptr;
}
}
void change_p(int num)
{
*_p = num;
}
private:
int* _p;
};
int main()
{
//深拷贝
NEW n1;
NEW n2;
n2 = n1;
n1.change_p(20);
return 0;
}