7

例えば:

class Foo : boost::noncopyable
{
    // ...
};

class Bar : public Foo
{
    // ...
};

Barコピー不可ですか?

4

4 に答える 4

8

カスタムコピーコンストラクターを作成し、そこでベースコピーコンストラクターを呼び出さない限り、デフォルトではコピーできません。

C++11で導入された明示的にデフォルト設定および削除された特殊メンバー関数も参照してください。コピーコンストラクター/オペレーターをプライベートにすると問題は解決しますが、コンパイラーはかなり明白とはほど遠い診断メッセージを生成するため、この問題を解決するために削除されたコピーコンストラクター/オペレーターがC++11にあります。

于 2011-07-28T18:32:55.603 に答える
2

派生クラスに、コピー不可能なコピーコンストラクターの呼び出しを回避するカスタムコピーコンストラクターがないと仮定すると、そうなります。すべてのレベルで、のすべての派生クラスはboost::noncopyableコピーできません。派生クラスのオブジェクトには、のサブオブジェクトも含まれているため、boost::noncopyable基本non-copyableクラスがコピー可能でないと、派生クラスをコピーできません。

于 2011-07-28T18:32:29.757 に答える
1

Bar(直接の継承ではありませんが)から派生しboost::noncopyableているので、そうです。

于 2011-07-28T18:33:28.290 に答える
1

はい、コピー可能である場合、すべての基本クラスはコピー可能である必要がありますが、boost::noncopyableはコピー可能ではありません

于 2011-07-28T18:34:15.540 に答える