c++中深浅拷贝以及写时拷贝的实现示例代码
发布时间:2020-12-31 07:05:15  所属栏目:经验  来源:网络整理 
            导读:本文主要给大家介绍了关于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);
 /                         | 
                  


