亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

淺談C++基類的析構函數為虛函數

2020-01-26 14:50:35
字體:
來源:轉載
供稿:網友

1、原因:

   在實現多態時, 當用基類指針操作派生類, 在析構時候防止只析構基類而不析構派生類。

2、例子:

 ?。?)、

    #include<iostream>  using namespace std;  class Base{  public:     Base() {};    ~Base() {cout << "Output from the destructor of class Base!" << endl;};    void DoSomething() { cout << "Do something in class Base!" << endl; };  };  class Derived : public Base{  public:     Derived() {};    ~Derived() { cout << "Output from the destructor of class Derived!" << endl; };    void DoSomething() { cout << "Do something in class Derived!" << endl; };  };  int  main(){      Derived* p = new Derived;     p->DoSomething();     delete p;     return 0;   }

  運行結果:

  Do something in class Derived!           

  Output from the destructor of class Derived!

  Output from the destructor of class Base! 

  代碼中基類的析構函數不是虛函數,在main函數中用繼承類的指針去操作繼承類的成員,釋放指針P的過程是:先釋放繼承類的資源,再釋放基類資源。

 ?。?)、

   #include<iostream>  using namespace std;  class Base{  public:     Base() {};    ~Base() {cout << "Output from the destructor of class Base!" << endl;};    void DoSomething() { cout << "Do something in class Base!" << endl; };  };  class Derived : public Base{  public:     Derived() {};    ~Derived() { cout << "Output from the destructor of class Derived!" << endl; };    void DoSomething() { cout << "Do something in class Derived!" << endl; };  };  int  main(){      Base* p = new Derived;     p->DoSomething();     delete p;     return 0;   }

    運行結果:

    Do something in class ClxBase!
    Output from the destructor of class ClxBase!

      代碼中基類的析構函數同樣不是虛函數,不同的是在main函數中用基類的指針去操作繼承類的成員,釋放指針P的過程是:只釋放基類的資源,而沒有調用繼承類的析構函數。 調用DoSomething()函數執行的也是基類定義的函數。

      一般情況下,這樣的刪除只能夠刪除基類對象,而不能刪除子類對象,形成了刪除一半形象,造成內存泄漏。

      在公有繼承中,基類對派生類及其對象的操作,只能影響到那些從基類繼承下來的成員。如果想要用基類對非繼承成員進行操作,則要把基類的這個函數定義為虛函數。 析構函數自然也應該如此:如果它想析構子類中的重新定義或新的成員及對象,當然也應該聲明為虛的。

   (3)、

  #include<iostream>  using namespace std;  class Base{  public:     Base() {};    virtual ~Base() {cout << "Output from the destructor of class Base!" << endl;};    virtual void DoSomething() { cout << "Do something in class Base!" << endl; };  };  class Derived : public Base{  public:     Derived() {};    ~Derived() { cout << "Output from the destructor of class Derived!" << endl; };    void DoSomething() { cout << "Do something in class Derived!" << endl; };  };  int  main(){      Base* p = new Derived;     p->DoSomething();     delete p;     return 0;   }

  運行結果:

    Do something in class ClxDerived!
    Output from the destructor of class ClxDerived!
    Output from the destructor of class ClxBase!

    代碼中基類的析構函數被定義為虛函數,在main函數中用基類的指針去操作繼承類的成員,釋放指針P的過程是:釋放了繼承類的資源,再調用基類的析構函數。調用DoSomething()函數執行的也是繼承類定義的函數。

3、總結:

  基類指針可以指向派生類的對象(多態性),如果刪除該指針delete p;就會調用該指針指向的派生類析構函數,而派生類的析構函數又自動調用基類的析構函數,這樣整個派生類的對象完全被釋放。如果析構函數不被聲明成虛函數,則編譯器實施靜態綁定,在刪除基類指針時,只會調用基類的析構函數而不調用派生類析構函數,這樣就會造成派生類對象析構不完全。所以,將析構函數聲明為虛函數是十分必要的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
福利视频第一区| 136fldh精品导航福利| 九九久久精品一区| 国产日韩av高清| 深夜福利一区二区| 国产精品女视频| 中文字幕亚洲专区| 97国产精品免费视频| 国产91精品高潮白浆喷水| 色偷偷91综合久久噜噜| 亚洲男人天堂网站| 疯狂蹂躏欧美一区二区精品| 国产精品福利观看| 中文字幕亚洲欧美一区二区三区| www.久久久久久.com| 亚洲性日韩精品一区二区| 日本午夜在线亚洲.国产| 欧美成人午夜激情在线| 日韩一二三在线视频播| 国产精品久久网| 亚洲跨种族黑人xxx| 亚洲第一页中文字幕| 久久人人爽人人爽人人片亚洲| 久久免费视频网| 91久久久久久久久久久久久| 久操成人在线视频| 国产精品青青在线观看爽香蕉| 久久久久久中文字幕| 亚洲一区制服诱惑| 亚洲最大福利视频网| 成人伊人精品色xxxx视频| 最近2019好看的中文字幕免费| 欧美人与物videos| 精品无人区乱码1区2区3区在线| 国产日韩欧美另类| 国产精品免费久久久久影院| 久久琪琪电影院| 啊v视频在线一区二区三区| 日韩精品在线视频美女| 欧美日本中文字幕| 国产亚洲精品综合一区91| 超碰91人人草人人干| 精品高清一区二区三区| 日韩精品高清在线| 欧美黄色成人网| 国产精品日韩欧美大师| 久久久成人精品视频| 国产免费一区二区三区在线观看| 久久伊人精品一区二区三区| 91精品国产高清久久久久久91| 日韩欧美精品网站| 91精品国产色综合久久不卡98| 日韩精品丝袜在线| 7777精品视频| 日韩精品一二三四区| 国产精品久久久久久久久借妻| 亚洲区中文字幕| 亚洲精品按摩视频| 国产精品九九久久久久久久| 欧美精品xxx| 国产精品永久免费观看| 成人xvideos免费视频| 98精品国产自产在线观看| 国产成人精品视频在线| 高清欧美电影在线| 91精品视频在线播放| 欧美激情亚洲国产| 亚洲www在线观看| 午夜精品一区二区三区在线视| 欧美片一区二区三区| 亚洲午夜色婷婷在线| 日本免费一区二区三区视频观看| 国产精品国产自产拍高清av水多| 中文字幕一区电影| 俺也去精品视频在线观看| 欧美大奶子在线| 亚洲精品久久久久久久久久久久| 欧美日韩国产成人在线| 国产精品免费在线免费| 精品亚洲一区二区三区在线观看| 成人激情视频在线观看| 欧美成人性生活| 亚洲一区二区三区在线免费观看| 久久久久久久亚洲精品| 国产精品视频精品视频| 国产欧美日韩综合精品| 欧美日韩国产中文精品字幕自在自线| 日韩福利伦理影院免费| 国产一区二区三区三区在线观看| 国产精品一久久香蕉国产线看观看| 国产精品手机播放| 久久久国产精品视频| 精品国产31久久久久久| 亚洲第一色中文字幕| 亚洲精品一区二区三区婷婷月| 国产欧美精品久久久| 亚洲香蕉在线观看| 欧美成人午夜剧场免费观看| 亚洲国产精品va在线看黑人动漫| 96精品视频在线| 欧美日韩亚洲一区二区三区| 欧美另类老女人| 日韩欧美在线观看视频| 国产成人综合一区二区三区| 国产精品h在线观看| 精品动漫一区二区| 欧美精品videosex牲欧美| 日韩av资源在线播放| 亚洲aⅴ日韩av电影在线观看| 亚洲xxxx妇黄裸体| 欧美激情欧美激情| 久久久久这里只有精品| 日韩专区在线观看| 欧洲中文字幕国产精品| 欧美疯狂xxxx大交乱88av| 亚洲欧洲日韩国产| 欧美日韩中文字幕日韩欧美| 日韩视频免费在线观看| 日韩在线观看网址| 亚洲欧美日韩精品久久奇米色影视| 亚洲xxxx视频| 久久久久久久av| 国产日韩欧美在线观看| 亚洲一区二区福利| 国产精品成久久久久三级| 久久视频中文字幕| 久久手机精品视频| 久久视频在线看| 欧美国产精品va在线观看| 狠狠躁夜夜躁人人爽超碰91| 久久精品在线视频| 欧美综合在线观看| 亚洲在线视频福利| 亚洲人成电影网站色…| 国产精品成人aaaaa网站| 亚洲免费伊人电影在线观看av| 亚洲精品国产欧美| 亚洲天堂男人的天堂| 国产精品日韩欧美| 欧美精品做受xxx性少妇| 亚洲欧美日韩一区二区在线| 成人国产在线视频| 97精品国产97久久久久久| 中文字幕欧美精品在线| xxxx欧美18另类的高清| 国产一区视频在线播放| 在线播放国产一区中文字幕剧情欧美| 91精品国产综合久久香蕉| 久久精品国产欧美激情| 欧美性感美女h网站在线观看免费| 欧美寡妇偷汉性猛交| 国产午夜精品视频免费不卡69堂| 日韩美女视频中文字幕| 国产精品日韩在线观看| 国产日韩欧美中文在线播放| 亚洲电影免费在线观看| 久久亚洲精品毛片| 欧美日韩亚洲91| 色婷婷综合久久久久中文字幕1| 国外成人在线视频| 精品一区二区三区三区| 日韩在线小视频| 亚洲精品999| 久久久中文字幕|