• <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>
            隨筆 - 27  文章 - 88  trackbacks - 0
            <2008年5月>
            27282930123
            45678910
            11121314151617
            18192021222324
            25262728293031
            1234567

            常用鏈接

            留言簿(4)

            文章分類(lèi)(3)

            文章檔案(3)

            搜索

            •  

            積分與排名

            • 積分 - 130348
            • 排名 - 198

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

             

            第二章 構(gòu)造函數(shù)語(yǔ)意學(xué)(the semantics of constructors

            21 Default Construcor 的建構(gòu)操作

            有四種情況,會(huì)導(dǎo)致“編譯器必須為未聲明constructor class 合成一個(gè) Default constructor . C++ Stardand 把那些合成物稱(chēng)為implicit nontrivial default constructor .被合成出來(lái)的的constructor 只能滿足編譯器(而非程序)的需求。它之所以能夠完成任務(wù),是借著“調(diào)用member object base class default constructor ”或是“為每一個(gè)object 初始化其virtual function 機(jī)制或virtual base class 機(jī)制” 而完成。至于沒(méi)有存在那四種情況而又沒(méi)有聲明任何constructor classes ,我們說(shuō)它們擁有的是 implicit trivial constructors, 它們實(shí)際上并不會(huì)被合成出來(lái)。

                   在合成的default constructor 中,只有base class subobjects member class objects h會(huì)被初始化。所有其它的nonstatic data member ,如整數(shù)、整數(shù)指針、整數(shù)數(shù)組等等都不會(huì)被初始化。這些初始化操作對(duì)程序而言或許有需要,但對(duì)編譯器則并非必要。如果程序需要一個(gè)“把某指針設(shè)為0default construct, 那么提供它的人應(yīng)該是程序員。

                   C++新手一般有兩個(gè)常見(jiàn)的誤解:

            1. 任何class 如果沒(méi)有定義default constructor ,就會(huì)被合成出一個(gè)來(lái)。

            2. 編譯器合成出來(lái)的default constructor 會(huì)明確設(shè)定“class 內(nèi)每一個(gè)data member 的默認(rèn)值”。

            2.2 Copy constructor 的建構(gòu)操作

                   是一種特殊構(gòu)造函數(shù),具有單個(gè)形參,該形參(常用CONST修飾)是對(duì)該類(lèi)類(lèi)型的引用。當(dāng)定義一個(gè)新對(duì)象并用一個(gè)同類(lèi)型的對(duì)象對(duì)它進(jìn)行初始化時(shí),將顯式使用拷貝構(gòu)造函數(shù)。當(dāng)將該類(lèi)型的對(duì)象傳遞給函數(shù)或從函數(shù)返回該類(lèi)型的對(duì)象時(shí),將隱式使用拷貝構(gòu)造函數(shù)。

             

            合成的拷貝構(gòu)造函數(shù):      

            即使我們定義了其他構(gòu)造函數(shù),也會(huì)合成拷貝構(gòu)造函數(shù)。合成拷貝構(gòu)造函數(shù)的行為是,執(zhí)行逐個(gè)成員初始化(memberwise initialize),將新對(duì)象初始化為原對(duì)象的副本。

            所謂“逐個(gè)成員”,指的是編譯器將現(xiàn)有對(duì)象的每個(gè)非static 成員,依次復(fù)制到正創(chuàng)建的對(duì)象。只有一個(gè)例外,每個(gè)成員的類(lèi)型決定了復(fù)制該成員的含義。合成拷貝構(gòu)造函數(shù)直接復(fù)制內(nèi)置類(lèi)型成員的值,類(lèi)類(lèi)型成員使用該類(lèi)的拷貝構(gòu)造函數(shù)進(jìn)行復(fù)制。數(shù)組成員的復(fù)制是個(gè)例外。雖然一般不能復(fù)制數(shù)組,但如果一個(gè)類(lèi)具有數(shù)組成員,則合成拷貝構(gòu)造函數(shù)將復(fù)制數(shù)組。復(fù)制數(shù)組時(shí)合成拷貝構(gòu)造函數(shù)將復(fù)制數(shù)組的每一個(gè)元素。

             

            注意:按位拷貝不會(huì)分配新的內(nèi)存空間而只是簡(jiǎn)單地將該地址的值復(fù)制給另一個(gè)指針,所以就會(huì)出現(xiàn)兩個(gè)指針指向同一塊內(nèi)存區(qū)域。

            不要Bitwise Copy Semantics!

            什么時(shí)候一個(gè)Class 不展現(xiàn)出“Bitwise Copy Semantics”呢?有四種情況:

            1. 當(dāng)class 內(nèi)含一個(gè)member object 而后者的class 聲明有一個(gè)copy constructor 時(shí)

            2. 當(dāng)class 繼承自一個(gè)base class 而后者存在存在有一個(gè)copy constructor 時(shí)(再次強(qiáng)調(diào),不論是被明確聲明或是被合成而得)。

            3. 當(dāng)class 聲明一個(gè)或多個(gè) virtual function 時(shí)。

            4. 當(dāng)class 派生自一個(gè)繼承串鏈,其中有一個(gè)或多個(gè)virtual base classes時(shí)。

            posted on 2008-05-23 09:04 Macaulish 閱讀(1753) 評(píng)論(2)  編輯 收藏 引用

            FeedBack:
            # re: Inside the C++ object model(二) 2008-05-23 13:00 編程的夜貓
            我又來(lái)了。好的。終于出二了。繼續(xù)支持博主  回復(fù)  更多評(píng)論
              
            # re: Inside the C++ object model(二) 2008-05-26 11:53 追夢(mèng)時(shí)代
            學(xué)習(xí)了,希望LZ繼續(xù),期盼您的這個(gè)系列。這本書(shū)一直沒(méi)有時(shí)間買(mǎi)來(lái)看,讀了LZ的文章真是受益匪淺。  回復(fù)  更多評(píng)論
              

            只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問(wèn)   Chat2DB   管理


            欧美成a人片免费看久久| 亚洲国产综合久久天堂| 欧美色综合久久久久久| 久久亚洲精品成人AV| 久久亚洲精品国产亚洲老地址| 国内精品人妻无码久久久影院导航| 一本一本久久a久久综合精品蜜桃| 日韩精品久久无码中文字幕| 国产精久久一区二区三区| 精品国产乱码久久久久久呢| 91超碰碰碰碰久久久久久综合 | 香蕉久久AⅤ一区二区三区| 亚洲中文精品久久久久久不卡| 久久久久夜夜夜精品国产| 国产毛片欧美毛片久久久| 精品久久人人爽天天玩人人妻| 欧洲成人午夜精品无码区久久 | 久久久久久毛片免费播放| 99久久www免费人成精品| 97精品伊人久久大香线蕉| 中文字幕一区二区三区久久网站| 影音先锋女人AV鲁色资源网久久 | 国产女人aaa级久久久级| 久久久久国产精品熟女影院| 久久综合视频网| 久久午夜无码鲁丝片午夜精品| 久久r热这里有精品视频| 97久久香蕉国产线看观看| 99久久国产精品免费一区二区| 一本久久免费视频| 一个色综合久久| 国产精品99久久久久久宅男小说| 久久精品国产亚洲精品| 久久婷婷五月综合色99啪ak| 久久精品国产只有精品66| 欧美伊人久久大香线蕉综合69| 久久93精品国产91久久综合| 久久久噜噜噜久久| 久久久久久午夜精品| 免费精品久久天干天干| 亚洲va久久久噜噜噜久久|