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

               二、copy constructor---拷貝構造函數,亦即帶有當且僅有一個參數,類型為同類對象的構造函數。從對象拷貝語義上講,可分為以下2種:1)bitwise copy 位拷貝,可以理解為淺拷貝  2)no bitwise copy 非位拷凡,可以理解為深拷貝。當一個class沒有顯式地聲明或定義copy constructor時,一個copy constructor就會被編譯器隱式地聲明或定義出來。那么這個implicitly copy constructor到底是bitwise copy還是no bitwise copy的呢?對于一個class,當存在以下4種情況時,其implicitly copy constructor就是no bitwise copy的。
               (1)class內含一個或多個成員對象,且這些member object中至少一個存在copy constructor(無論是顯式的copy constructor還是隱式的no bitwise copy constructor)
               (2)class派生自一個繼承串鏈,其中至少有一個base class存在copy constructor(再次強調,無論是顯式的copy constructor還是隱式的no bitwise copy constructor)
               (3)class聲明一個或多個虛函數
               (4)class派生自一個繼承串鏈,其中至少有一個虛基類,而不管這些virtual base class是否存在copy constructor
               顯而易見,這4種情況是正交的,當不存在以上4種情況時,其implicitly copy constructor就是bitwise copy的。只有no bitwise copy的copy 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-08-31 11:40 春秋十二月 閱讀(4950) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            亚洲AV无码久久精品色欲| 亚洲精品无码久久久久sm| 久久久无码人妻精品无码| 国产成人久久精品区一区二区| 欧美精品一本久久男人的天堂| 免费一级欧美大片久久网| 久久精品国产清高在天天线| 国产日韩久久久精品影院首页| 亚洲精品乱码久久久久久| 香港aa三级久久三级| AV色综合久久天堂AV色综合在| 久久久久久精品成人免费图片| www.久久99| 久久精品青青草原伊人| 久久99精品久久久久久噜噜| 久久精品国产亚洲沈樵| 国产麻豆精品久久一二三| 亚洲伊人久久综合影院| 思思久久99热只有频精品66| 欧美777精品久久久久网| 中文成人无码精品久久久不卡| 精品国产VA久久久久久久冰| 九九精品久久久久久噜噜| 久久乐国产综合亚洲精品| 久久精品国产久精国产| 久久久噜噜噜久久中文字幕色伊伊 | 久久九九免费高清视频| 久久99精品国产99久久6| 久久青青草原国产精品免费| 久久亚洲精品人成综合网 | 国产一区二区三区久久| 久久精品国产亚洲AV蜜臀色欲| 精品欧美一区二区三区久久久| 99国产欧美久久久精品蜜芽| 亚洲精品乱码久久久久66| 精品久久久中文字幕人妻| 精品久久久无码21p发布| 亚洲国产美女精品久久久久∴| 久久精品国产2020| 久久成人国产精品免费软件| 成人久久免费网站|