浅拷贝:调用类中默认的构造函数或者赋值操作符
eg:
A a1;
A a2=a1;
浅拷贝只是简单地把a1的地址复制给a2
而这种浅拷贝会带来以下的后果:
(1) a1,a2共享同一个地址,因此改变a2的成员会相应改变a1
(2)若执行a2=a1(赋值运算符),则也是讲a1的地址复制给a2,而a2本身的内存没有释放,造成内存泄漏
(3)如果任意一个对象被析构,则这块内存会被释放两次,造成编译错误
深拷贝:
自己定义拷贝构造函数或赋值运算符
String(const String &s)
:_str(NULL)
{
String tmp(s._str);
swap(_str, tmp._str);
}
String& operator =(const String& s)
{
if (this != &s)
{
String tmp(s._str);
swap(tmp._str, _str);
return *this;
}
}//调用构造析构
浅拷贝只是简单的复制地址,深拷贝会重新开辟内存空间