新聞中心
這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
string類的深淺拷貝,寫時拷貝-創(chuàng)新互聯(lián)
string類的深淺拷貝,寫時拷貝
淺拷貝:多個指針指向同一塊空間,多次析構(gòu)同一塊內(nèi)存空間,系統(tǒng)會崩潰。(淺拷貝就是值拷貝)
深拷貝:給指針開辟新的空間,把內(nèi)容拷貝進去,每個指針都指向自己的內(nèi)存空間,析構(gòu)時不會內(nèi)存崩潰。
#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()"< 寫時拷貝:會存在一個計數(shù)器,并且多個對象指向同一塊空間,每次創(chuàng)建一個新的對象時計數(shù)器加++,銷毀時計數(shù)器--,直到計數(shù)器count=0時析構(gòu)。
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()"<另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。
當前文章:string類的深淺拷貝,寫時拷貝-創(chuàng)新互聯(lián)
網(wǎng)站鏈接:http://www.dlmjj.cn/article/diedpd.html