コピー不可能なクラスを作成し、それを myclass に継承しようとしています。コードは次のようになります。
template<class T>
struct NonCopyable
{
protected:
NonCopyable() {}
private:
NonCopyable(const NonCopyable& x) = delete;
T& operator=(const T& x) = delete;
};
delete を使用すると、delete キーワードを再利用して関数を「deleted」として定義する第 3 のメカニズムが可能になります。
class Myclass : public RefCnt, private NonCopyable<Myclass>
{
virtual unsigned int GetID() = 0;
virtual bool Serialize() = 0;
};
これを試してみると、VS 2010 で次のようなエラーが表示されます。
コンパイラは、非仮想関数を純粋として作成しようとしていると考えています。誰かが理由を説明してもらえますか? 「削除」キーワードを削除することで、上記の問題を解決できます。