• <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>

            woaidongmao

            文章均收錄自他人博客,但不喜標題前加-[轉貼],因其丑陋,見諒!~
            隨筆 - 1469, 文章 - 0, 評論 - 661, 引用 - 0
            數據加載中……

            default constructor 和 copy constructor 小結

             一、default constructor---默認構造函數,亦即無參構造函數。從對象構造語義上講,可分為以下2種:1trivial 平凡的,可以理解為淺構造  2notrivial 非平凡的,可以理解為深構造。當一個class沒有顯式地(explicitly)聲明或定義任何constructor的時候,一個default constructor就會被編譯器隱式地(implicitly)聲明或定義出來。那么這個implicitly default constructor到底是trivial還是notrivial的呢?對于一個class,當存在以下4種情況時,其implicitly default constructor就是notrivial的。
              
            1class內含一個或多個成員對象(member object),且這些member object中至少一個存在default constructor(無論是顯式的default constructor還是隱式的notrival default constructor
               2class派生自一個繼承串鏈,其中至少有一個base class存在default constructor(再次強調,無論是顯式的default constructor還是隱式的notrival default constructor
               3class聲明一個或多個虛函數(virtual function)
               4class派生自一個繼承串鏈,其中至少有一個虛基類(virtual base class),而不管這些virtual base class是否存在default constructor
              
            顯而易見,這4種情況是正交的,當不存在以上4種情況時,其implicitly default constructor就是trivial的。只有notrivialdefault constructor才會被編譯器真正生成,而trivial的不會生成。

              
            二、copy constructor---拷貝構造函數,亦即帶有當且僅有一個參數,類型為同類對象的構造函數。從對象拷貝語義上講,可分為以下2種:1bitwise copy 位拷貝,可以理解為淺拷貝  2no bitwise copy 非位拷凡,可以理解為深拷貝。當一個class沒有顯式地聲明或定義copy constructor時,一個copy constructor就會被編譯器隱式地聲明或定義出來。那么這個implicitly copy constructor到底是bitwise copy還是no bitwise copy的呢?對于一個class,當存在以下4種情況時,其implicitly copy constructor就是no bitwise copy的。
              
            1class內含一個或多個成員對象,且這些member object中至少一個存在copy constructor(無論是顯式的copy constructor還是隱式的no bitwise copy constructor
               2class派生自一個繼承串鏈,其中至少有一個base class存在copy constructor(再次強調,無論是顯式的copy constructor還是隱式的no bitwise copy constructor
               3class聲明一個或多個虛函數
               4class派生自一個繼承串鏈,其中至少有一個虛基類,而不管這些virtual base class是否存在copy constructor
               顯而易見,這4種情況是正交的,當不存在以上4種情況時,其implicitly copy constructor就是bitwise copy的。只有no bitwise copycopy constructor才會被編譯器真正生成,而bitwise copy的不會生成。

              
            三、對于defualt constructor,當一個class內顯式地存在constructor(包括default constructor)時,編譯器不會再生成它,但如果這個class滿足以上4中情況至少一種時,編譯器就需要負責執行相關的初始化:對于情況(1)要調用成員對象的default constructor;對于情況(2)要調用基類的default constructor;對于情況(3)要設定虛函數表的指針;對于情況(4)要設定虛基類的指針和偏移量。而這些初始化在用戶代碼執行前。
                   
              
            四、對于copy constructor,當一個class內顯式地存在copy constructor時,編譯器不會再生成它,但如果這個class滿足以上情況(3)()(4)時,編譯器就需要負責執行相關的拷貝:對于情況(3)要決定怎么設定虛函數表指針。對于情況(4)要決定怎么設定虛基類的指針和偏移量。同理類推,如果這個class滿足情況(1)()(2),而且其成員對象或基類子對象又滿足情況(3)()(4)時,編譯器也需要負責執行相關的拷貝了。而這些拷貝在用戶代碼執行前。

            posted on 2011-07-08 11:55 肥仔 閱讀(632) 評論(0)  編輯 收藏 引用 所屬分類: C++ 基礎

            无码八A片人妻少妇久久| 久久青草国产精品一区| 中文成人久久久久影院免费观看| 久久免费香蕉视频| 精品久久无码中文字幕| 国产精品欧美久久久久无广告| 日本高清无卡码一区二区久久| 人妻精品久久无码专区精东影业| 久久精品国产99国产电影网| 久久国内免费视频| 国产精品激情综合久久| 伊人久久大香线蕉亚洲 | 久久九九久精品国产免费直播| 精品久久久久久无码中文野结衣| 久久国内免费视频| 久久久久亚洲精品无码网址| 久久一日本道色综合久久| 亚洲午夜精品久久久久久app| 97久久综合精品久久久综合| 麻豆av久久av盛宴av| 国产午夜精品久久久久九九| 久久久精品国产sm调教网站| 人妻无码αv中文字幕久久琪琪布 人妻无码精品久久亚瑟影视 | 亚洲午夜无码久久久久小说| 91精品国产高清91久久久久久| 久久久这里有精品| 综合久久给合久久狠狠狠97色 | 久久人做人爽一区二区三区| 精品视频久久久久| 久久久噜噜噜久久| 久久精品中文字幕第23页| 国产巨作麻豆欧美亚洲综合久久| 久久精品一区二区三区不卡| 国产亚洲综合久久系列| 久久久久人妻精品一区二区三区| 中文字幕无码免费久久| 欧美一区二区久久精品| 亚洲伊人久久成综合人影院| 无码国内精品久久综合88| 久久综合狠狠综合久久综合88| 久久er99热精品一区二区|