string类的深浅拷贝,写时拷贝
成都创新互联专注于上城网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供上城营销型网站建设,上城网站制作、上城网页设计、上城网站官网定制、小程序设计服务,打造上城网络公司原创品牌,更为您提供上城网站排名全网营销落地服务。
浅拷贝:多个指针指向同一块空间,多次析构同一块内存空间,系统会崩溃。(浅拷贝就是值拷贝)
深拷贝:给指针开辟新的空间,把内容拷贝进去,每个指针都指向自己的内存空间,析构时不会内存崩溃。
#include#include using namespace std; class String { public: String(const char*str) :_str(new char [strlen(str)+1]) { strcpy(_str,str); } //String(const String& str) //浅拷贝 // :_str(str._str) // {} //String &operator=(const String& str) //{ // if(this!= &str) // { // _str = str._str; // } // return *this; //} String(const String& str) //深拷贝 :_str(new char[strlen(str._str)+1]) { strcpy(_str,str._str); } String &operator=(const String& str) { if(this!=&str) { //delete[] _str; //_str=new char [strlen(str._str)+1]; //strcpy(_str,str._str); _str=str._str; } return *this; } ~String() { if(_str) { cout<<"~String()"< 写时拷贝:会存在一个计数器,并且多个对象指向同一块空间,每次创建一个新的对象时计数器加++,销毁时计数器--,直到计数器count=0时析构。
class String { public: String(const char*str) :_str(new char [strlen(str)+1]) ,_count(1) { strcpy(_str,str); } String(const String& str) :_str(str._str) { _count++; } String &operator=(const String& str) { if(this!= &str) { _str = str._str; } return *this; } ~String() { if(--_count == 0) { cout<<"~String()"<
网站标题:string类的深浅拷贝,写时拷贝
标题链接:http://bzwzjz.com/article/poggps.html