一.浅拷贝
仅将指针指向同一块堆空间内容。
后果:如果对象涉及到资源管理,多个对象共用同一块资源。调用析构函数时,一个销毁了堆上内容,另一个无法销毁。报错。
string(const string1& s)
:_str(s._str)
{
_pcount = s._pcount;
(*_pcount)++;
}
二.深拷贝
开辟一段新的空间,拷贝堆上内容至新空间
- 第一种方法
string(const string& s)
:_str(new char[strlen(s._str)+1])
{
strcpy(_str,s._str);
}
- 第二种方法
string(const string& s)
:_str(nullptr)
{
string strtemp(s._str);
swap(_str, strtemp._str);//标准库提供的交换函数。
}