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':純粹的說明符或抽象重寫說明符只允許虛函數。
編譯器認爲我正在嘗試創建一個非虛函數爲純。有人可以解釋爲什麼嗎?我可以通過刪除「刪除」關鍵字來解決上述問題。
我懷疑答案是:'= delete'還沒有被編譯器支持。我沒有VS 2010來確認。 – Flexo 2012-02-27 00:03:22
我也這麼認爲,但我該如何驗證? – jan 2012-02-27 00:06:35
如果您使用'= delete',那麼直接使用它,而不是從使用它的類繼承。是的,VS10不支持。 – 2012-02-27 00:06:41