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

            happem

            為什么需要構造函數和析構函數

             

            編譯器無法預期一個程序在執行過程中會在何時創建一些什么對象,而只能根據當時的上下文要求創建,對象的初始化最好能夠通過運行時執行一個函數來完成,而且是在對象創建的同時,這個函數就是構造函數,同樣,對象在完成其使命的時候能夠通過一個函數來銷毀,這就是析構函數。

            當給一個對象分配好原始內存空間的時候,這個對象就應該算創建起來了。只不過它還處于一種“原始狀態”,即末初始化的,不良的狀態,如果把這樣的內存直接拿來使用,除非第一個操作是賦值,否則極有可能出錯。例如:

               Long long1;         //局部變量

               Count<

               Char*pstr=(char*)malloc(1024);

               Cout<

            因此,創建一個變量或動態對象時一定不要忘記初始化。 初始化就是在對象創建的同時使用初值直接填充對象的內存單元,因此,不會有數據類型轉換等中間過程,也就不會產生臨時對象,而賦值則是在對象創建好后任何時候都可以調用的而且可以多次調用的函數,由于它調用的是“=”運算符,因此可能需要進行類型轉換,即會產生臨時對象。

            C++對象可以使用構造函數來初始化,構造函數是任何對象創建時自動調用的第一個成員函數,也是為每個對象僅調用一次的成員函數,所以構造函數的作用就是:當對象的內存分配好后把它原始狀態變成良好的可用的狀態。

            有的程序員可能認為:雖然我沒有在構造函數中初始化數據成員,但是我在聲明一個對象后馬上調用它的set-XXX()函數來初始化它的每一個成員,效果也是一樣的。

            最好為每個類顯式地定義構造函數和析構函數,即使它們暫時空著,尤其是當類含有指針成員或引用成員的時候。

            構造函數的另一重要用途就是給一些可能可能存在的隱含成員如vptr創造一個初始化的機會,否則虛擬機將不能保證實現,每當此時,如果程序員沒有為一個多態類顯式地定義默認構造函數、拷貝構造函數、析構函數或拷貝賦值函數,那么編譯器會自動得生成相應的函數,它們都是public inline的,并在其中插入正確初始化或修改vptr數據成員值的代碼,而且確保基類對象和派生類對象構造時及在它們之間拷貝時vptr能夠指向或重新指向恰當的vtable,這樣的4個函數分布叫非平凡默認構造函數、非平凡拷貝構造函數、非平凡析構函數和非平凡拷貝賦值函數。www.lirenedu.org

            posted on 2012-09-03 10:56 happem 閱讀(662) 評論(0)  編輯 收藏 引用

            久久久久亚洲AV片无码下载蜜桃| 国内精品久久人妻互换| 久久青青草原亚洲av无码| 精品久久人人爽天天玩人人妻 | 亚洲午夜久久久影院伊人| 久久精品无码一区二区无码| 成人a毛片久久免费播放| 99精品久久久久久久婷婷| segui久久国产精品| 无码AV波多野结衣久久| 国产激情久久久久影院老熟女免费| 偷偷做久久久久网站| 久久精品国产精品亜洲毛片| 久久精品无码午夜福利理论片| 午夜精品久久久久久久无码| 99国内精品久久久久久久| 久久久久成人精品无码中文字幕| 日韩久久无码免费毛片软件| 久久婷婷国产麻豆91天堂| 精品蜜臀久久久久99网站| 久久久久久国产精品无码下载 | 色婷婷噜噜久久国产精品12p| 99久久人妻无码精品系列蜜桃| 久久久久久久91精品免费观看| 久久99精品免费一区二区| 久久最近最新中文字幕大全| 国产精品久久久久国产A级| 久久精品国产2020| 亚洲中文久久精品无码ww16| 国内精品久久久久影院薰衣草 | 久久国产精品99精品国产| 精品久久久中文字幕人妻| 国产精品久久久久久五月尺| 模特私拍国产精品久久| 久久久精品国产| 久久久亚洲欧洲日产国码二区| 午夜不卡久久精品无码免费| 久久久亚洲欧洲日产国码二区| 久久亚洲精品无码AV红樱桃| 久久99久久99精品免视看动漫| 精品久久久久久成人AV|