【C++】深浅拷贝大不同

一.浅拷贝

仅将指针指向同一块堆空间内容。
后果:如果对象涉及到资源管理,多个对象共用同一块资源。调用析构函数时,一个销毁了堆上内容,另一个无法销毁。报错。

	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);//标准库提供的交换函数。
		}
发布了53 篇原创文章 · 获赞 49 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_43550839/article/details/102534295