在C++ 11,我們能夠聲明析構函數是自動生成的:默認純虛析
struct X {
virtual ~X() = default;
};
另外,我們可以聲明析構函數是純虛:
struct X {
virtual ~X() = 0;
};
我的問題是:如何聲明析構函數爲均爲自動生成和純虛擬?看起來像下面的語法不正確:
struct X {
virtual ~X() = 0 = default;
};
這也不是一:
struct X {
virtual ~X() = 0, default;
};
這也不之一:
struct X {
virtual ~X() = 0 default;
};
編輯: 一些澄清問題的目的。基本上我想空的類是不可實例化的基類,但派生類是可實例化的,那麼類必須有一個純虛擬析構函數。但另一方面,我不想在.cpp文件中提供定義。所以我需要一些相當於default
的機制。我想知道有沒有人有解決這個問題的想法。
你能做到'虛擬〜X()= 0 {}'?現在再想想你想做什麼。 – Xeo 2012-07-15 18:20:03
@Xeo:是的,你可以。但不是用那種語法;您必須提供非內聯實現。任何純虛函數都可能有一個默認實現 - 這僅僅意味着非抽象派生類*必須*實現該函數,但可能會調用父類的默認實現作爲其實現的一部分。 – JohannesD 2012-07-15 18:22:10
@JohannesD:我知道,看到我對Michal的答案的評論,但是'= default'基本上是{}}課堂上的(如果你沒有成員)。 – Xeo 2012-07-15 18:23:09