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

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

            default constructor 和 copy constructor 小結(jié)

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

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

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

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

            色综合久久中文综合网| 亚洲愉拍99热成人精品热久久 | 亚洲欧美国产日韩综合久久| 色综合久久天天综合| 日韩中文久久| 97久久超碰国产精品2021| 久久久久国产日韩精品网站| 精品久久人人爽天天玩人人妻| 久久精品国产亚洲av水果派 | 波多野结衣AV无码久久一区| 久久精品黄AA片一区二区三区| 亚洲国产精品久久久久网站| 久久精品卫校国产小美女| 91精品国产综合久久香蕉 | 久久精品亚洲一区二区三区浴池| 国产精品久久久99| 久久亚洲中文字幕精品有坂深雪| 国内精品久久久久久久影视麻豆 | AV无码久久久久不卡蜜桃| 久久久久国产一级毛片高清版| 国内高清久久久久久| 久久精品国产亚洲一区二区三区| 国产产无码乱码精品久久鸭| 久久久精品国产| 亚洲精品国精品久久99热| 色成年激情久久综合| 久久精品国产一区| 国产综合久久久久| 奇米影视7777久久精品| 伊人久久大香线蕉综合Av| 亚洲国产一成久久精品国产成人综合| 久久99国产精品二区不卡| 99国产精品久久| 97精品久久天干天天天按摩| 久久综合久久自在自线精品自| 久久精品亚洲AV久久久无码| 超级97碰碰碰碰久久久久最新| 久久久久久毛片免费播放| 欧美无乱码久久久免费午夜一区二区三区中文字幕| 丰满少妇人妻久久久久久| 99久久人妻无码精品系列蜜桃 |