例えば:
class Foo : boost::noncopyable
{
// ...
};
class Bar : public Foo
{
// ...
};
Bar
コピー不可ですか?
例えば:
class Foo : boost::noncopyable
{
// ...
};
class Bar : public Foo
{
// ...
};
Bar
コピー不可ですか?
カスタムコピーコンストラクターを作成し、そこでベースコピーコンストラクターを呼び出さない限り、デフォルトではコピーできません。
C++11で導入された明示的にデフォルト設定および削除された特殊メンバー関数も参照してください。コピーコンストラクター/オペレーターをプライベートにすると問題は解決しますが、コンパイラーはかなり明白とはほど遠い診断メッセージを生成するため、この問題を解決するために削除されたコピーコンストラクター/オペレーターがC++11にあります。
派生クラスに、コピー不可能なコピーコンストラクターの呼び出しを回避するカスタムコピーコンストラクターがないと仮定すると、そうなります。すべてのレベルで、のすべての派生クラスはboost::noncopyable
コピーできません。派生クラスのオブジェクトには、のサブオブジェクトも含まれているため、boost::noncopyable
基本non-copyable
クラスがコピー可能でないと、派生クラスをコピーできません。
Bar
(直接の継承ではありませんが)から派生しboost::noncopyable
ているので、そうです。
はい、コピー可能である場合、すべての基本クラスはコピー可能である必要がありますが、boost::noncopyableはコピー可能ではありません