深拷貝與淺拷貝

  • 深拷貝和淺拷貝可以簡(jiǎn)單理解為:如果一個(gè)類(lèi)擁有資源,當(dāng)這個(gè)類(lèi)的對(duì)象發(fā)生復(fù)制過(guò)程的時(shí)候,資源重新分配,這個(gè)過(guò)程就是深拷貝,反之,沒(méi)有重新分配資源,就是淺拷貝。

如果在類(lèi)中沒(méi)有顯式地聲明一個(gè)拷貝構(gòu)造函數(shù),那么,編譯器將會(huì)自動(dòng)生成一個(gè)默認(rèn)的拷貝構(gòu)造函數(shù),該構(gòu)造函數(shù)完成對(duì)象之間的位拷貝,位拷貝又稱(chēng)淺拷貝。故自定義拷貝構(gòu)造函數(shù)是一種良好的編程風(fēng)格,它可以阻止編譯器形成默認(rèn)的拷貝構(gòu)造函數(shù),提高源碼效率。

  • 位拷貝,也就是把對(duì)象里的值完全復(fù)制給另一個(gè)對(duì)象,如B=A。這時(shí),如果A中有一個(gè)成員變量指針已經(jīng)申請(qǐng)了內(nèi)存,那B中的那個(gè)成員變量也指向同一塊內(nèi)存。這就出現(xiàn)了問(wèn)題:當(dāng)A把內(nèi)存釋放了(如:析構(gòu)),這時(shí)B內(nèi)的指針就是野指針了,出現(xiàn)運(yùn)行錯(cuò)誤。

自定義拷貝構(gòu)造函數(shù)舉例:

#include <iostream>  
using namespace std;  
  
class Example {  
private:  
     int a;  
public:  
        //構(gòu)造函數(shù)  
     Example(int b)  
     { a = b;}  
  
      //拷貝構(gòu)造函數(shù)  
      Example(const Example &example)  
      {  
          a = example.a;  
      }  

     void Show ()  
     {  
        cout<<a<<endl;  
      }  
};  
  
int main()  
{  
     Example A(100);  
     Example B = A; //注意這里的對(duì)象初始化要調(diào)用拷貝構(gòu)造函數(shù),而非賦值,等同于Example B(A);  
     B.Show ();  
     return 0;  
}

這里的Example(const Example &example)就是自定義的拷貝構(gòu)造函數(shù),與構(gòu)造函數(shù)一樣,名字必須與類(lèi)名相同,只是其參數(shù)必須是該類(lèi)的對(duì)象的一個(gè)引用變量Example &example。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 對(duì)于普通類(lèi)型的對(duì)象來(lái)說(shuō),它們之間的復(fù)制是很簡(jiǎn)單的,例如: int a=88; int b=a; 而類(lèi)對(duì)象與普通對(duì)象...
    踩在浪花上00閱讀 703評(píng)論 0 3
  • 深拷貝和淺拷貝這個(gè)問(wèn)題在面試中常常被問(wèn)到,而在實(shí)際開(kāi)發(fā)中,只要稍有不慎,就會(huì)在這里出現(xiàn)問(wèn)題。尤其對(duì)于初學(xué)者來(lái)說(shuō),我...
    西門(mén)淋雨閱讀 1,924評(píng)論 0 1
  • 1、對(duì)象拷貝有兩種方式:淺復(fù)制和深復(fù)制。顧名思義,淺復(fù)制,并不拷貝對(duì)象本身,僅僅是拷貝指向?qū)ο蟮闹羔槪簧顝?fù)制是直接...
    滴答大閱讀 850評(píng)論 0 2
  • 這篇文章主要翻譯apple的官方文檔和其他類(lèi)似博文的學(xué)習(xí)記錄 Copying Collections 概念 拷貝的...
    devZhang閱讀 3,175評(píng)論 4 23
  • 梨子同學(xué)最近很煩的慌,回娘家老是被家里人說(shuō)這說(shuō)那。歸根結(jié)底,就是怪她沒(méi)眼光,沒(méi)嫁對(duì)人,說(shuō)她老公家庭條件不是特別好,...
    秦貓貓閱讀 1,157評(píng)論 1 20

友情鏈接更多精彩內(nèi)容