2012-07-27 73 views
0
class A 
{ 
public: 
    A(...) {...} 
    virtual ~A() {...} 

private: 
    // may contains data 
}; 

class B : public A 
{ 
public: 
    B(...) {...} 
private: 
    // contains no data 
}; 

class C : public B 
{ 
public: 
    C(...) {...} 
    ~C() {...} 
private: 
    // may contains data 
}; 

正如你所看到的,class A是基類,所以我們必須提供一個實現的虛析構函數。我們應該爲中間繼承類提供默認實現:

問題>我們是否必須爲具體的class B提供默認析構函數? class B本身不需要實現自定義的析構函數來釋放任何已分配的資源。

謝謝

+0

號<多餘的字符,使極限> – 2012-07-27 14:42:53

回答

2

號一旦一個鹼基的析構函數是虛擬的,所有派生析構函數自動虛擬的。如果默認實現足夠,則不需要提供用戶定義的析構函數。

(事實上,如果默認執行在基地連足夠,還應當聲明並把它定義爲virtual ~A() = default;,而不是一個空的身體。)

+0

好! C++ 11語法! – q0987 2012-07-27 14:47:02

1

不,如果您沒有資源可以發佈,則不需要那樣做。

這同樣適用於任何其它方法,包括virtualpure virtual