抽象基底クラスをコピーできないようにし、そこから派生するクラスを強制的にコピー不可にしたいと考えています。以下のコードでは、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'sのコピーコンストラクタについてのコンパイル時にエラーをスローすると予想する場合、コンパイルして実行(http://ideone.com/g4gGLm)。たぶん私は、このコピー不可クラスが何を意味するのかを誤解しているのかもしれません。その場合、派生クラスにコピーコンストラクタを定義させないように強制する方法はありますか? (答えはC++ 11を使用できますが、好ましくはブーストできません)
私は今、あなたのクラスEの例のおかげで、コピー不可能なものについて理解しています。ありがとう – steve9164