Common wisdom是,如果你可以通過一個純虛擬析構函數來創建一個類的抽象。應該可以初始化具有未覆蓋的純虛擬析構函數的類嗎?
引述Herb Sutter:
所有的基類應該有一個虛析構函數(見的原因你最喜歡的C++的書)。如果類應該是抽象的(你要防止其實例化),但它不會發生在任何其他的純虛函數,一個共同的技術,使析構函數純虛:
#include <iostream>
struct base {
virtual ~base() = 0;
};
base::~base() { std::cout << "base destructor\n"; }
struct derived : base { };
int main() {
derived d;
}
已經改變的東西在C++ 11,我是不知道的?
順便說一句,這個問題的動機是一個answer I gave five years ago和突然挑戰commenter。
爲什麼它不能編譯?您正在實例化派生對象,而不是基礎對象。只有你的基礎是抽象的,因爲你的派生類有默認的析構函數。 – Horstling 2014-08-31 13:29:42
'有一個純虛擬構造函數'=>'有一個純虛擬析構函數嗎? – Gluttton 2014-08-31 13:43:01
@Gluttton哎呀,謝謝。 – Motti 2014-08-31 13:51:06