2014-04-27 51 views
3

我使用多重繼承這樣的:破壞者:虛擬還是不是?

struct A { 
    virtual ~A(){} 
}; 

struct B { 
    virtual void foo() = 0; 
protected: 
    ~B(){} // never called directly 
}; 

struct C : public A, public B { 
    virtual void foo(){}; 
}; 

應的B析構函數進行虛擬的或沒有?一方面,所有其他析構函數在這裏都是虛擬的。另一方面,虛擬構造函數可能會涉及一些成本,爲什麼不保存呢?

+0

因爲節約幾乎沒有 –

回答

3

一個好的規則就是讓析構函數成爲虛擬的,直到你找到一個不應該是虛擬的好理由。這將幫助您避免將來出現錯誤,並且如果將來您發現自己獲得了巨大的性能提升,那麼您可以輕鬆地將其刪除。