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

            Benjamin

            靜以修身,儉以養(yǎng)德,非澹薄無(wú)以明志,非寧?kù)o無(wú)以致遠(yuǎn)。
            隨筆 - 397, 文章 - 0, 評(píng)論 - 196, 引用 - 0
            數(shù)據(jù)加載中……

            C++之Destructors(析構(gòu)函數(shù))

            Destructors實(shí)質(zhì)是釋放資源;
            類的析構(gòu)執(zhí)行順序是先構(gòu)造(Constructed)的(成員),最后被Destructors,數(shù)組成員同樣如此,例如:數(shù)組a[0], a[1], ..., a[8], a[9]: 析構(gòu)執(zhí)行順序是a[9], a[8], ..., a[1], a[0]:不能有參數(shù),不能有返回值,不能重載;只能在(對(duì)象關(guān)閉)自動(dòng)調(diào)用,不能顯示調(diào)用析構(gòu)函數(shù)(除非placement new),不可以調(diào)用兩次。
            值得注意的是不能顯式調(diào)用析構(gòu)函數(shù),即使局部變量也不行。此時(shí)我們需要這樣處理:
            void someCode()
             {
               {
                 File f;
                ...........
               }
             // f 的析構(gòu)函數(shù)在此處會(huì)被自動(dòng)調(diào)用!
             }
            如果上述的方案還是不可行,我們可以考慮增加一個(gè)和析構(gòu)函數(shù)等效的成員方法,例如:我們常見File類,就可增加一個(gè)Close()成員方法,但是要記住和析構(gòu)函數(shù)一樣,不能聯(lián)系調(diào)用兩次,我們可以將一個(gè)fileHandle_數(shù)據(jù)成員設(shè)置為 -1,并且在開頭檢查fileHandle_是否已經(jīng)等于-1;
            class File {
             public:
               void close();
               ~File();
               ...
             private:
               int fileHandle_;   
            // fileHandle_ >= 0 if/only-if it's open
             };
             
             File::~File()
             {
               close();
             }
             
             void File::close()
             {
               if (fileHandle_ >= 0) {
                 
            ...insert code to call the OS to close the file...
                 fileHandle_ = -1;
               }
             }
            如果一個(gè)對(duì)象是new的,那么在delete中也不能顯示調(diào)用析構(gòu)函數(shù),因?yàn)閐elete做了兩件事,調(diào)用析構(gòu)銷毀對(duì)象和釋放空間。這里的new可不是operator new,后者只是分配空間,并沒調(diào)用構(gòu)造函數(shù)。
            placement最明顯的作用就是把對(duì)象放到特定的內(nèi)存位置。

            #include <new>        // Must #include this to use "placement new"
             #include "Fred.h"     
            // Declaration of class Fred
             
             void someCode()
             {
               char memory[sizeof(Fred)];     
            // Line #1
               void* place = memory;          
            // Line #2
             
               Fred* f = new(place) Fred();   
            // Line #3 (see "DANGER" below)
               
            // The pointers f and place will be equal
             
               
            ...
             }
            Line #3中的構(gòu)造函數(shù)中的this指針將等于place,f的返回值也是place,注意:placenew指向的指針要有足夠的空間,并且需要為所創(chuàng)建的對(duì)象進(jìn)行邊界調(diào)整,編譯器和系統(tǒng)不會(huì)對(duì)此進(jìn)行任何檢查,另外placenew的析構(gòu)應(yīng)該像如下這樣編寫:
            void someCode()
             {
               char memory[sizeof(Fred)];
               void* p = memory;
               Fred* f = new(p) Fred();
               ...
               f->~Fred();   
            // Explicitly call the destructor for the placed object
             }
            在編寫析構(gòu)函數(shù)時(shí),也不能顯正調(diào)用成員的析構(gòu)函數(shù),類的析構(gòu)函數(shù)會(huì)自動(dòng)調(diào)用成員的析構(gòu),按照和它們?cè)陬愔械穆暶鞯捻樞蛳喾吹捻樞虮晃鰳?gòu)。
            在派生類的析構(gòu)中,不能顯式調(diào)用基類的析構(gòu)。派生類的析構(gòu)會(huì)自動(dòng)調(diào)用基類的析構(gòu)函數(shù)。在多重繼承的情況下,直接基類以出現(xiàn)在繼承列表中的順序的反序被析構(gòu)。

            posted on 2010-11-26 00:18 Benjamin 閱讀(1017) 評(píng)論(1)  編輯 收藏 引用 所屬分類: C/C++

            評(píng)論

            # seo backlinks  回復(fù)  更多評(píng)論   

            好貼。我必須說(shuō),這個(gè)職位處理了話題,能真正傳授新的思路。我真的很感激。希望你們繼續(xù)發(fā)布有用的職位。
            2011-01-11 16:25 | dating website
            久久久久国产精品人妻| 77777亚洲午夜久久多喷| 伊人伊成久久人综合网777| 亚洲国产精品久久电影欧美| 97久久精品无码一区二区| 国产精品欧美久久久久天天影视| 久久久久亚洲AV成人网人人网站| 国产一区二区三区久久| 99精品国产免费久久久久久下载 | 人妻无码αv中文字幕久久琪琪布 人妻无码久久一区二区三区免费 人妻无码中文久久久久专区 | 人妻无码精品久久亚瑟影视| 91精品国产高清91久久久久久| 久久久久人妻精品一区三寸蜜桃 | 国产精品免费看久久久香蕉| 99久久国产亚洲综合精品| 久久精品国产一区| 亚洲AV成人无码久久精品老人| 九九久久精品无码专区| 国产亚洲综合久久系列| 狠狠色丁香久久婷婷综合蜜芽五月| 欧美久久综合性欧美| 亚洲精品无码专区久久久| 四虎国产精品成人免费久久| 99久久无码一区人妻| 精品综合久久久久久97超人 | 久久免费视频6| 91性高湖久久久久| 国产精品国色综合久久| 精品久久久久久无码专区不卡| yy6080久久| 国产精品乱码久久久久久软件| 久久久久一本毛久久久| 久久99精品免费一区二区| 99久久国产免费福利| 伊人丁香狠狠色综合久久| 久久精品国产亚洲麻豆| 青草影院天堂男人久久| 国产69精品久久久久777| 久久人人爽人人人人爽AV| 亚洲欧美另类日本久久国产真实乱对白| 精品久久久久久99人妻|