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

            久久久国产精品| 色综合久久久久| 亚洲国产精品无码久久SM| 日本五月天婷久久网站| 久久久久久久久无码精品亚洲日韩| 久久人人爽人人爽人人片AV不| 香蕉久久夜色精品国产小说| 久久久久国产一区二区三区| 亚洲中文字幕无码久久2017| 国产综合精品久久亚洲| 久久精品国产清高在天天线| 久久久久久噜噜精品免费直播| 亚洲色欲久久久综合网| 激情久久久久久久久久| 无码人妻久久一区二区三区免费丨| 国产综合免费精品久久久| 欧美一区二区三区久久综| 亚洲国产精品综合久久一线| 亚洲天堂久久久| 久久国产精品久久| 蜜臀久久99精品久久久久久小说| 久久精品国产亚洲Aⅴ香蕉| 成人久久综合网| 99久久国产精品免费一区二区| 久久久久亚洲爆乳少妇无| 99国产精品久久| 久久天天躁狠狠躁夜夜网站 | 日韩精品久久久肉伦网站| 久久久久这里只有精品| 久久最近最新中文字幕大全| 久久久噜噜噜久久中文福利| 中文字幕久久精品无码| 久久受www免费人成_看片中文| 国产视频久久| 久久精品99无色码中文字幕| 99久久免费国产特黄| www性久久久com| 久久国产成人精品麻豆| 国产99久久久久久免费看| 久久本道伊人久久| 国内精品伊人久久久久网站|