抽象基本クラスをコピー不可にし、それから派生するクラスを強制的にコピー不可にしたい。以下のコードは、noncopyable.hppで定義されているBoostのnoncopyableを使用していますが、派生クラスであるDがコピーコンストラクターを定義できるようにしています。
class noncopyable
{
protected:
noncopyable() {}
~noncopyable() {}
private: // emphasize the following members are private
noncopyable( const noncopyable& );
const noncopyable& operator=( const noncopyable& );
};
class D : noncopyable
{
public:
D() { }
D(const D&) { }
};
int main()
{
D a;
D b(a);
return 0;
}
このコードは、Dのコピーコンストラクターに関するコンパイル時エラーをスローすると予想したときに、コンパイルして実行します( http://ideone.com/g4gGLm )。たぶん私は、このコピー不可能なクラスが何を意味するのかを誤解しました。もしそうなら、派生クラスにコピーコンストラクターを定義しないように強制する方法はありますか?(回答はC ++ 11を使用できますが、ブーストはできません)