哪吒2之魔童闹海|哪吒2之魔童归来免费观看|哪吒2在线观看|哪吒2魔童闹海电影免费观看|哪吒2免费观看完整版大电影|哪吒1免费观看完整版

新疆軟件開發(fā)

本站首頁 軟件開發(fā) 成功案例 公司新聞 公司簡介 客服中心 軟件技術(shù) 網(wǎng)站建設(shè)
  您現(xiàn)在的位置: 新疆二域軟件開發(fā)公司 >> 開發(fā)語言 >> 文章正文

C++類析構(gòu)函數(shù)學習

1.前言
        大部分對象在使用之之后沒有正確的從內(nèi)存清理完畢,造成內(nèi)存泄露也是C++出錯的主要領(lǐng)域
引入類的析構(gòu)是正確的從內(nèi)存中清量類的對象
一般什么時候觸發(fā)并調(diào)用類的析構(gòu)函數(shù)呢?
答案是:當類實例對象超出它的有效作用域時,也就是撤消類對象時,自動調(diào)用析構(gòu)函數(shù)來清理對象
構(gòu)造函數(shù)用來初始化成員,析造函數(shù)則是用來清理對象
如我們刪除一個類的指針對象,則自動調(diào)用析構(gòu)函數(shù):
sales_item是一個類
sales_item *p = new sales_item //建立并分配一個類的指針p
delete p;//這就是撤消類的對象,隨后它自動調(diào)用析構(gòu)函數(shù)
2.定義
構(gòu)造函數(shù)名和類名完全一樣,并在名字前面加"~"符號
每個類只有一個析構(gòu)函數(shù)
2.1定義格式
~析構(gòu)函數(shù)名稱(){}    //一般析構(gòu)函數(shù):
virtual ~析構(gòu)函數(shù)名稱(){} //虛析構(gòu)函數(shù):
代碼如下
class item{
public:
~item(){}
};
3 基類與派生類
3.1一般基類是不用寫出析構(gòu)函數(shù),編譯器自動添加一個
類aa可以正常的工作就是編譯器自動添加了四個函數(shù)
如代碼
class aa{
public:
   //構(gòu)造,析構(gòu),復制構(gòu)造,賦值操作符四個函數(shù)由編譯器自動添加
   int getx(){return x;}
   void set(int a){x=a;}
private:
 int x;
};

3.2析構(gòu)函數(shù)"三法則",如果類中有復制構(gòu)造函數(shù)和賦值操作符重載,則析構(gòu)函數(shù)必須要,三者缺一不可
class bb{
public:
 bb(const bb& rhs){...}    //復制構(gòu)造函數(shù)
 bb& operator=(const bb& rhs){...} //賦值操作符
 ~bb(){清理函數(shù)}                   //析構(gòu)函數(shù)       
private:
 int x
};
以上三個函數(shù)三者必須同時出現(xiàn),以免出現(xiàn)有的對象清除不了,有的出現(xiàn)"淺復制錯誤"

3.3如果類中有指針成員,則必須專門寫一個析構(gòu)函數(shù)來清理指針成員,編譯器默認添加的析構(gòu)函數(shù)不會去清理指針對象
如果類中有指針成員,如鏈表結(jié)構(gòu)實現(xiàn)等,
指針成員是基本單位,在方便使用指針的同時,如何管理好它們的工作就是C++中最困難的部分

這個析構(gòu)函數(shù)最好特別定制,做法是析構(gòu)函數(shù)加一個清理函數(shù),析構(gòu)函數(shù)直接調(diào)用它就OK

3.4派生類
虛成員函數(shù)和虛析構(gòu)函數(shù)通常是成對出現(xiàn)
當基類有虛函數(shù)時,派生類會發(fā)生動態(tài)調(diào)用,也就是動態(tài)綁定,
當不知道是調(diào)用基類對象還是調(diào)用派生類對象時,還要正確的清理它們就更加困難啦,在基類引入虛析構(gòu)函數(shù)后,
它也能發(fā)生動態(tài)綁定,正確的清理對象,這些都要到程序運行后才能知道調(diào)用對象,在編譯前是無法知道對象是誰的
代碼:
//基類
class base{
public:
 virtual draw(){}; //虛方法
 virtual ~base(){};//虛析構(gòu)函數(shù)
};

//派生類
class dev : public base{
public:
   draw(){}//draw方法的實現(xiàn)
   ~dev(){}//析構(gòu)函數(shù)
};

4.設(shè)計指導
4.1一般的類我們不需要設(shè)計出它的析構(gòu)函數(shù),編譯器自動為我們構(gòu)建一個析構(gòu)函數(shù)
4.2析構(gòu)函數(shù)"三法則",如果類中有復制構(gòu)造函數(shù)和賦值操作符重載,則析構(gòu)函數(shù)必須要,三者缺一不可
4.3如果類中有指針成員,則必須專門寫一個析構(gòu)函數(shù)來清理指針成員,編譯器默認添加的析構(gòu)函數(shù)不會去清理指針對象
4.4"虛函數(shù)和虛析構(gòu)函數(shù)成對實現(xiàn)",
當類中有虛成員時,定制虛析構(gòu)函數(shù),讓派生類實行動態(tài)綁定方式來清除基類對象或者派生類對象

作者:未知 | 文章來源:未知 | 更新時間:2008-1-15 16:43:08

  • 上一篇文章:

  • 下一篇文章:

  • 相關(guān)文章:
    C++基礎(chǔ)知識:結(jié)構(gòu)體數(shù)據(jù)的指針變量
    如何實現(xiàn)C與C++程序的相互調(diào)用
    在C++中成員函數(shù)如何實現(xiàn)操作符重載?
    基礎(chǔ)學習:C++非成員函數(shù)實現(xiàn)操作符重載
    基礎(chǔ)學習:C++重載輸入輸出符
    基礎(chǔ)學習:C++重載下標結(jié)算符
    基礎(chǔ)學習:C++中重載調(diào)用操作符
    基礎(chǔ)學習:C++重載轉(zhuǎn)換操作符operator (type)
    C++類復制控制學習
    C++類構(gòu)造函數(shù)學習
    軟件技術(shù)
    · 開發(fā)語言
    · Java技術(shù)
    · .Net技術(shù)
    · 數(shù)據(jù)庫開發(fā)
    最新文章  
    ·搜集整理的asp.net的驗證方
    ·各種FOR循環(huán)結(jié)構(gòu)的整理
    ·軟件項目開發(fā)中應該考慮那
    ·搜集整理的javascript sel
    ·軟件開發(fā)中項目經(jīng)理有那些
    ·學習如何在Lambda表達式進
    ·C++基礎(chǔ)知識:結(jié)構(gòu)體數(shù)據(jù)的
    ·C#實現(xiàn)短信發(fā)送程序的例子
    ·sun最近修補了一部分java的
    ·rss定制的另外一種實現(xiàn)方式
    ·delphi實現(xiàn)利用arp欺騙來實
    ·基礎(chǔ)學習:基于WF的流程框
    ·網(wǎng)絡(luò)編程中怎樣得知一次數(shù)
    ·如何逆序輸出單鏈表?
    ·軟件開發(fā)過程中的性能設(shè)計
    關(guān)于我們 | 軟件開發(fā) | 下載試用 | 客服中心 | 聯(lián)系我們 | 友情鏈接 | 網(wǎng)站地圖 | 新疆電子地圖 | RSS訂閱
    版權(quán)所有 © 2016 新疆二域軟件開發(fā)網(wǎng) www.pg11qqq.com All Rights Reserved 新ICP備14003571號
    新疆軟件開發(fā)總機:0991-4842803、4811639.
    客服QQ:596589785 ;地址:新疆烏魯木齊北京中路華聯(lián)大廈A-5C 郵編:830000