2

クラスのコピーを無効にするには、プライベートとして宣言する必要がありますが、定義はoperator=(const MyClass&)MyClass(const MyClass&)ません。また、このクラスのmove ctorも無効にする必要がありますか?

4

2 に答える 2

5

移動コンストラクターが暗黙的に生成されるかどうか (およびいつ生成されるか) は、まだ議論の余地があります。

2010 年 10 月 17 日の Stroustrup によるこの PDFを参照してください

ところで、C++0x では= delete、関数を非公開にして未定義にするのではなく、関数にすることができます。

class non_copyable {
    public:
    non_copyable(const non_copyable&) = delete;
    non_copyable& operator=(const non_copyable&) = delete;
};
于 2010-11-23T11:26:44.957 に答える
0

VS 2010 ドキュメントからの引用:

既定のコピー コンストラクターとは異なり、コンパイラは既定の移動コンストラクターを提供しません。

したがって、VS 2010 では、それを非表示にする必要はありません。彼らはデフォルトの移動代入演算子について特に議論していませんが、それも生成しないと思います。

于 2010-11-23T14:12:15.810 に答える