浅拷贝 是按字节拷贝, 我们默认不写编译器生成的拷贝构造就是浅拷贝,当我们类中存在资源时,如果调用拷贝构造, 此时两个对象都共用了一份资源, 各自调用析构时会产生二次释放的问题;
深拷贝 是重新申请一个新的空间分配给新拷贝的对象, 两个对象各自使用不同内存空间的资源, 调用析构时就不存在二次释放的问题
深拷贝代码:
class Strings
{
public:
Strings(const char* str = "")
{
assert(str != nullptr);
_str = new char[strlen(str) + 1];
strcpy(_str, str);
}
Strings(const Strings& s): _str(new char[strlen(s._str)+1])
{
strcpy(_str, s._str);
}
private:
char* _str;
};