2012-02-27 34 views
3

我想創建一個不可複製的類並將其繼承到myclass。下面的代碼的樣子:「刪除」創建一個不可複製的類並繼承到我的類

template<class T> 
struct NonCopyable 
{ 
protected: 
    NonCopyable() {} 
private: 
    NonCopyable(const NonCopyable& x) = delete; 
    T& operator=(const T& x) = delete; 
}; 

的刪除允許通過再使用delete關鍵字的三分之一機制來定義一個函數作爲

class Myclass : public RefCnt, private NonCopyable<Myclass> 
{ 
    virtual unsigned int GetID() = 0; 
    virtual bool Serialize() = 0; 
}; 

現在,當我試試這個,我在我的VS 2010上得到一個錯誤,如下所示:'NonCopyable':純粹的說明符或抽象重寫說明符只允許虛函數。

編譯器認爲我正在嘗試創建一個非虛函數爲純。有人可以解釋爲什麼嗎?我可以通過刪除「刪除」關鍵字來解決上述問題。

+3

我懷疑答案是:'= delete'還沒有被編譯器支持。我沒有VS 2010來確認。 – Flexo 2012-02-27 00:03:22

+0

我也這麼認爲,但我該如何驗證? – jan 2012-02-27 00:06:35

+3

如果您使用'= delete',那麼直接使用它,而不是從使用它的類繼承。是的,VS10不支持。 – 2012-02-27 00:06:41

回答

4

你可以從這個post看到vs2010不支持默認或刪除的功能。對於這個問題既不會vc11

+0

哦,非常感謝這些信息! – jan 2012-02-27 00:10:36

相關問題