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

            為什么需要構(gòu)造函數(shù)和析構(gòu)函數(shù)

             

            編譯器無法預(yù)期一個(gè)程序在執(zhí)行過程中會(huì)在何時(shí)創(chuàng)建一些什么對(duì)象,而只能根據(jù)當(dāng)時(shí)的上下文要求創(chuàng)建,對(duì)象的初始化最好能夠通過運(yùn)行時(shí)執(zhí)行一個(gè)函數(shù)來完成,而且是在對(duì)象創(chuàng)建的同時(shí),這個(gè)函數(shù)就是構(gòu)造函數(shù),同樣,對(duì)象在完成其使命的時(shí)候能夠通過一個(gè)函數(shù)來銷毀,這就是析構(gòu)函數(shù)。

            當(dāng)給一個(gè)對(duì)象分配好原始內(nèi)存空間的時(shí)候,這個(gè)對(duì)象就應(yīng)該算創(chuàng)建起來了。只不過它還處于一種“原始狀態(tài)”,即末初始化的,不良的狀態(tài),如果把這樣的內(nèi)存直接拿來使用,除非第一個(gè)操作是賦值,否則極有可能出錯(cuò)。例如:

               Long long1;         //局部變量

               Count<

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

               Cout<

            因此,創(chuàng)建一個(gè)變量或動(dòng)態(tài)對(duì)象時(shí)一定不要忘記初始化。 初始化就是在對(duì)象創(chuàng)建的同時(shí)使用初值直接填充對(duì)象的內(nèi)存單元,因此,不會(huì)有數(shù)據(jù)類型轉(zhuǎn)換等中間過程,也就不會(huì)產(chǎn)生臨時(shí)對(duì)象,而賦值則是在對(duì)象創(chuàng)建好后任何時(shí)候都可以調(diào)用的而且可以多次調(diào)用的函數(shù),由于它調(diào)用的是“=”運(yùn)算符,因此可能需要進(jìn)行類型轉(zhuǎn)換,即會(huì)產(chǎn)生臨時(shí)對(duì)象。

            C++對(duì)象可以使用構(gòu)造函數(shù)來初始化,構(gòu)造函數(shù)是任何對(duì)象創(chuàng)建時(shí)自動(dòng)調(diào)用的第一個(gè)成員函數(shù),也是為每個(gè)對(duì)象僅調(diào)用一次的成員函數(shù),所以構(gòu)造函數(shù)的作用就是:當(dāng)對(duì)象的內(nèi)存分配好后把它原始狀態(tài)變成良好的可用的狀態(tài)。

            有的程序員可能認(rèn)為:雖然我沒有在構(gòu)造函數(shù)中初始化數(shù)據(jù)成員,但是我在聲明一個(gè)對(duì)象后馬上調(diào)用它的set-XXX()函數(shù)來初始化它的每一個(gè)成員,效果也是一樣的。

            最好為每個(gè)類顯式地定義構(gòu)造函數(shù)和析構(gòu)函數(shù),即使它們暫時(shí)空著,尤其是當(dāng)類含有指針成員或引用成員的時(shí)候。

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

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


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


            久久天堂AV综合合色蜜桃网 | 国产毛片欧美毛片久久久| 亚洲精品视频久久久| 亚洲精品午夜国产VA久久成人| 中文字幕日本人妻久久久免费| 久久国产免费观看精品3| 品成人欧美大片久久国产欧美| 波多野结衣久久一区二区| 国产成人久久AV免费| 欧美精品一区二区久久| 97久久天天综合色天天综合色hd | 久久99精品久久久久久| 欧美无乱码久久久免费午夜一区二区三区中文字幕 | 青青青国产精品国产精品久久久久| 久久久久18| 国产精品久久亚洲不卡动漫| 亚洲国产高清精品线久久| 久久久久亚洲AV无码网站| 亚洲国产成人久久笫一页| 国产精品亚洲美女久久久| 精品熟女少妇a∨免费久久| 18禁黄久久久AAA片| 久久久久无码精品国产app| 色综合合久久天天综合绕视看| 青青草原综合久久大伊人| 久久无码国产| 久久99精品国产麻豆蜜芽| 色综合久久88色综合天天 | 亚洲综合伊人久久综合| 一级女性全黄久久生活片免费| 久久国产成人| 久久国产成人午夜aⅴ影院| 国产成人久久精品二区三区| AV狠狠色丁香婷婷综合久久| 久久99精品久久久久久动态图| 性欧美丰满熟妇XXXX性久久久| 久久99精品国产麻豆宅宅| 精品伊人久久大线蕉色首页| 77777亚洲午夜久久多人| 亚洲人成网亚洲欧洲无码久久| 久久人人爽人人爽人人av东京热 |