第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么我們需要C ++中的純虛擬析構函數(shù)?

為什么我們需要C ++中的純虛擬析構函數(shù)?

C++
牧羊人nacy 2019-10-05 14:31:23
我了解需要虛擬析構函數(shù)。但是為什么我們需要一個純虛擬析構函數(shù)?在一篇C ++文章中,作者提到了當我們要使類抽象時,我們使用純虛擬析構函數(shù)。但是我們可以通過將任何成員函數(shù)設為純虛函數(shù)來使類抽象。所以我的問題是我們什么時候才能真正使析構函數(shù)成為純虛擬的?有人可以舉一個很好的實時例子嗎?當我們創(chuàng)建抽象類時,是否使析構函數(shù)也成為純虛擬的,是一種好習慣?如果是的話..那為什么呢?
查看完整描述

3 回答

?
鴻蒙傳說

TA貢獻1865條經(jīng)驗 獲得超7個贊

允許純虛擬析構函數(shù)的真正原因可能是,禁止它們意味著在語言中添加另一條規(guī)則,并且不需要此規(guī)則,因為允許純虛擬析構函數(shù)不會帶來任何不良影響。


不,普通的舊虛擬就足夠了。


如果使用默認實現(xiàn)為其虛擬方法創(chuàng)建對象,并希望使其抽象而不強迫任何人重寫任何特定方法,則可以將析構函數(shù)設為純虛擬。我看不出很多意義,但是有可能。


請注意,由于編譯器將為派生類生成隱式析構函數(shù),因此,如果類的作者不這樣做,則任何派生類都不會是抽象的。因此,在基類中具有純虛擬析構函數(shù)不會對派生類產(chǎn)生任何影響。它只會使基類成為抽象類(感謝@kappa的注釋)。


人們可能還認為,每個派生類可能都需要具有特定的清理代碼,并使用純虛擬析構函數(shù)作為提示來編寫它,但這似乎是人為的(并且不強制執(zhí)行)。


注意:析構函數(shù)是唯一的方法,即使它是純虛擬的,也必須具有實現(xiàn)才能實例化派生類(是的,純虛擬函數(shù)可以具有實現(xiàn))。


struct foo {

    virtual void bar() = 0;

};


void foo::bar() { /* default implementation */ }


class foof : public foo {

    void bar() { foo::bar(); } // have to explicitly call default implementation.

};


查看完整回答
反對 回復 2019-10-05
?
慕工程0101907

TA貢獻1887條經(jīng)驗 獲得超5個贊

您需要的抽象類至少是一個純虛函數(shù)。任何功能都可以;但是碰巧的是,析構函數(shù)是任何類都會擁有的東西-因此它始終是候選對象。此外,使析構函數(shù)為純虛擬的(而不是純虛擬的)除了使類抽象之外,沒有行為方面的副作用。因此,許多樣式指南建議始終使用純虛擬destuctor表示類是抽象的—如果出于其他原因,它提供了一致的位置,那么閱讀代碼的人可以查看該類是否是抽象的。


查看完整回答
反對 回復 2019-10-05
?
慕的地8271018

TA貢獻1796條經(jīng)驗 獲得超4個贊

如果要創(chuàng)建抽象基類:


這不能被實例化(是的,這是多余的與術語“抽象”?。?/p>

但需要虛擬析構函數(shù)的行為(您打算攜帶指向ABC的指針,而不是指向派生類型的指針,并通過它們進行刪除)

但并不需要任何其他虛擬調(diào)度其他方法的行為(也許還有有沒有其他的方法呢?考慮一個簡單的受保護的“資源”的容器,它需要一個構造函數(shù)/析構函數(shù)/分配,但僅此而已)

...最簡單的方法是使析構函數(shù)成為純虛函數(shù),并為其提供定義(方法主體),從而使類抽象。


對于我們假設的ABC:


您保證無法實例化它(即使是在類本身內(nèi)部,這也就是為什么私有構造函數(shù)可能不夠用),您可以得到析構函數(shù)所需的虛擬行為,而不必查找和標記另一個不需要將虛擬調(diào)度作為“虛擬”。


查看完整回答
反對 回復 2019-10-05
  • 3 回答
  • 0 關注
  • 1099 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號