• <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>
            隨筆-162  評論-223  文章-30  trackbacks-0
               一、default constructor---默認構(gòu)造函數(shù),亦即無參構(gòu)造函數(shù)。從對象構(gòu)造語義上講,可分為以下2種:1)trivial 平凡的,可以理解為淺構(gòu)造  2)notrivial 非平凡的,可以理解為深構(gòu)造。當(dāng)一個class沒有顯式地(explicitly)聲明或定義任何constructor的時候,一個default constructor就會被編譯器隱式地(implicitly)聲明或定義出來。那么這個implicitly default constructor到底是trivial還是notrivial的呢?對于一個class,當(dāng)存在以下4種情況時,其implicitly default constructor就是notrivial的。
               (1)class內(nèi)含一個或多個成員對象(member object),且這些member object中至少一個存在default constructor(無論是顯式的default constructor還是隱式的notrival default constructor)
               (2)class派生自一個繼承串鏈,其中至少有一個base class存在default constructor(再次強調(diào),無論是顯式的default constructor還是隱式的notrival default constructor)
               (3)class聲明一個或多個虛函數(shù)(virtual function)
               (4)class派生自一個繼承串鏈,其中至少有一個虛基類(virtual base class),而不管這些virtual base class是否存在default constructor
               顯而易見,這4種情況是正交的,當(dāng)不存在以上4種情況時,其implicitly default constructor就是trivial的。只有notrivial的default constructor才會被編譯器真正生成,而trivial的不會生成。

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

               三、對于defualt constructor,當(dāng)一個class內(nèi)顯式地存在constructor(包括default constructor)時,編譯器不會再生成它,但如果這個class滿足以上4種情況至少一種時,編譯器就需要負責(zé)執(zhí)行相關(guān)的初始化:對于(1)要調(diào)用成員對象的default constructor;對于(2)要調(diào)用基類的default constructor;對于(3)要設(shè)定虛函數(shù)表的指針;對于(4)要設(shè)定虛基類的指針和偏移量。而這些初始化在用戶代碼執(zhí)行前。
                    
               四、對于copy constructor,當(dāng)一個class內(nèi)顯式地存在copy constructor時,編譯器不會再生成它,但如果這個class滿足以上情況(3)或(和)(4)時,編譯器就需要負責(zé)執(zhí)行相關(guān)的拷貝:對于(3)要決定怎么設(shè)定虛函數(shù)表指針。對于(4)要決定怎么設(shè)定虛基類的指針和偏移量。同理類推,如果這個class滿足情況(1)或(和)(2),而且其成員對象或基類子對象又滿足情況(3)或(和)(4)時,編譯器也需要負責(zé)執(zhí)行相關(guān)的拷貝了。而這些拷貝在用戶代碼執(zhí)行前。
            posted on 2011-08-31 11:40 春秋十二月 閱讀(4960) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            亚洲色欲久久久久综合网| 久久精品免费网站网| 色综合久久久久久久久五月 | 97精品依人久久久大香线蕉97| 久久婷婷五月综合成人D啪 | 国产精品内射久久久久欢欢| 香蕉99久久国产综合精品宅男自 | 国内精品伊人久久久久妇| 久久久久精品国产亚洲AV无码| 2021久久精品国产99国产精品| 久久天天躁狠狠躁夜夜2020 | 久久人人爽人人人人爽AV | 久久国产免费观看精品3| 久久精品国产99久久香蕉| 99精品国产99久久久久久97| 国产一区二区精品久久凹凸| 久久精品aⅴ无码中文字字幕重口 久久精品a亚洲国产v高清不卡 | 久久久久久国产a免费观看黄色大片| 国内精品久久久久久久97牛牛| 久久免费香蕉视频| 久久亚洲国产欧洲精品一| 久久久久av无码免费网| 理论片午午伦夜理片久久 | 久久久久久人妻无码| 一极黄色视频久久网站| 久久国产精品一区| 国产精品久久久久久久午夜片 | 久久综合给合久久狠狠狠97色69| 无码人妻少妇久久中文字幕| 无码精品久久一区二区三区| 久久亚洲中文字幕精品一区四| 国产综合成人久久大片91| 国产日韩欧美久久| 久久精品国产一区二区 | 亚洲国产精品无码久久SM | 少妇无套内谢久久久久| 国产精品中文久久久久久久| 久久亚洲精品无码aⅴ大香| 99久久综合国产精品免费 | 久久国产综合精品五月天| 国产精品无码久久四虎|