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