• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            posts - 34,comments - 2,trackbacks - 0
                拷貝即是通常所說的復制(Copy)或克隆(Clone),對象的拷貝也就是從現(xiàn)有對象復制一個“一模一樣”的新對象出來。雖然都是復制對象,但是不同的復制方法,復制出來的新對象卻并非完全一模一樣,對象內部存在著一些差異。通常的拷貝方法有兩種,即深拷貝和淺拷貝,那二者之間有何區(qū)別呢?
            我的理解是:

            1、深拷貝和淺拷貝之間的區(qū)別在于是否復制了子對象。
            2、如果一個類擁有資源(堆,或者是其它系統(tǒng)資源),,當這個類的對象發(fā)生復制過程的時候,資源重新分配,這個過程就是深拷貝,反之對象存在資源,但復制過程并未復制資源的情況視為淺拷貝。

            當用一個已初始化過了的自定義類類型對象去初始化另一個新構造的對象的時候,拷貝構造函數就會被自動調用。也就是說,當類的對象需要拷貝時,拷貝構造函數將會被調用。以下情況都會調用拷貝構造函數:
            ①、一個對象以值傳遞的方式傳入函數體:這個好理解,因為傳遞給函數體的參數不是  str 而是 _str  ,是str的復制品。所以必然會調用拷貝構造函數。 
            ②、一個對象以值傳遞的方式從函數返回 :相當于構造一個新的對象。
            ③、一個對象需要通過另外一個對象進行初始化。:同上、

            正如您理解那樣 “淺拷貝:只拷貝對象的基本屬性,其他的引用不拷貝,還是保留引用”如果在類中沒有顯式地聲明一個拷貝構造函數,那么,編譯器將會自動生成一個默認的拷貝構造函數,該構造函數完成對象之間的位拷貝。當對象沒有指針時,按照上面的規(guī)則,則一切正常,淺拷貝把數據復制過新對象。但當對象有指針時,因為淺拷貝引用不拷貝,所以新對象與舊對象他們指向的是同一個內存區(qū),這時當釋放內存時就出現(xiàn)釋放兩次,出錯了。

            這時需要深拷貝..................
            所以通常我們需要自己寫拷貝構造函數,以免出現(xiàn)錯誤。
            //////////////參考資料所得,正確與否歡迎討論、

             

            posted on 2011-09-27 01:24 Yu_ 閱讀(391) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            亚洲国产精品无码久久九九| 国产成人无码精品久久久久免费| 一级a性色生活片久久无少妇一级婬片免费放 | 久久精品人人槡人妻人人玩AV | 国产精品视频久久| 久久久青草青青国产亚洲免观| 亚洲午夜精品久久久久久app| 乱亲女H秽乱长久久久| 爱做久久久久久| 亚洲国产精品久久久天堂| 成人精品一区二区久久| 精品熟女少妇AV免费久久| 久久综合狠狠综合久久激情 | 一本久久a久久精品亚洲| 国产ww久久久久久久久久| 久久久久久亚洲精品成人| 日韩影院久久| 久久精品一区二区影院| 精品久久久久中文字幕日本| 亚洲国产成人久久一区久久| 91亚洲国产成人久久精品| 浪潮AV色综合久久天堂| 久久精品国产男包| 欧美精品丝袜久久久中文字幕 | 午夜精品久久久久久| 成人精品一区二区久久久| 久久99国产综合精品| 无码精品久久久天天影视| 久久夜色精品国产噜噜亚洲a| 久久久久九九精品影院| 亚洲成人精品久久| 国产福利电影一区二区三区久久久久成人精品综合 | 久久精品亚洲乱码伦伦中文| 99精品久久精品一区二区| 亚洲精品无码成人片久久| 伊人久久综合成人网| 伊人久久精品无码二区麻豆| 亚洲av成人无码久久精品| 久久人人爽人人爽人人片av高请| 亚洲国产精品18久久久久久| 久久婷婷五月综合97色 |