2012-02-20 116 views
1

考慮下面的例子:在課程名稱後面使用MSVCC擴展關鍵字「abstract」是一種很好的做法嗎?

class CBase abstract 
{ 
protected: 
    CBase() { } 
}; 

我能擺脫要麼受保護的構造或「抽象」關鍵字。該關鍵字使用起來很直觀,但據我所知,其他編譯器(特別是Gcc)不支持該關鍵字。

我也想知道如果使用某種宏來編寫g ++編譯的代碼很容易編寫。如果我想要在MS Windows以外的系統上編譯我的代碼,我想最小化代碼更改。

回答

2

什麼用空定義一個純虛析構函數,即

class CBase { 
public: 
    virtual ~CBase() = 0; 
} 

inline CBase::~CBase() {} 

任何未偶數體面C++編譯器支持這個和標準允許它。

+0

我聽說添加純虛擬析構函數會導致不必要的開銷。 – 2012-02-20 11:51:41

+1

編譯器可能會完全優化空的定義(即根本不會調用它)。 – 2012-02-20 11:52:46

+0

@Bartek:你測過它了嗎? – 2012-02-20 12:05:55

1

宏將是微不足道的:#define abstract。關鍵字不會添加功能。

+0

但是也使用抽象關鍵字的純虛擬方法呢? – 2012-02-20 14:09:19

相關問題