c++中深浅拷贝以及写时拷贝的实现示例代码
发布时间:2020-12-30 23:44:31 所属栏目:经验 来源:网络整理
导读:本文主要给大家介绍了关于c++中深浅拷贝及写时拷贝实现的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 一:浅拷贝lt;iostreamusing namespace std;class String{public: String(char* str = "") :_str(new char[strlen(str)+1])
|
本文主要给大家介绍了关于c++中深浅拷贝及写时拷贝实现的相关内容,分享出来供大家参考学习,下面话不多说,来一起看看详细的介绍: 一:浅拷贝&深拷贝 浅拷贝:在拷贝构造的时候,直接将原内容的地址交给要拷贝的类,两个类共同指向一片空间。但是存在很大的缺陷:①一旦对s2进行操作,s1的内容也会改变;②析构时先析构s2,再析构s1,但是由于s1,s2指向同一片空间,会导致一片空间的二次析构导致出错。 深拷贝:通过开辟和源空间大小相同的空间并将内容拷贝下来再进行操作。不论是否对s2进行操作,都会拷贝一片相同大小的空间以及内容下来。 图示如下:
深拷贝实现如下:
#include <iostream>
using namespace std;
class String
{
public:
String(char* str = "")
:_str(new char[strlen(str)+1])
{
strcpy(_str,str);
}
//传统写法,开辟空间
String(const String& s)
{
_str = new(char[strlen(s._str) + 1]);
strcpy(_str,s._str);
}
//现代写法,利用构造函数
//String(const String& s)
// :_str(NULL)
//{
// String tmp(s._str);
// swap(_str,tmp._str);
/ |



