クラスの移動コンストラクタを無効にしたいとします。移動するのではなく、コピーコンストラクターをベースにしたいと思います。私はこのコードを記述しようとすると:コンパイル時に移動コンストラクタを無効にする
class Boo
{
public:
Boo(){}
Boo(const Boo& boo) {};
Boo(Boo&& boo) = delete;
};
Boo TakeBoo()
{
Boo b;
return b;
}
を私はエラーを受け取っ:
error C2280: 'Boo::Boo(Boo &&)': attempting to reference a deleted function
は、どのように私の代わりに移動コンストラクタと力のコピーを無効にすることができますか?
はちょうど移動コンストラクタをオーバーロードしていないと、すでに標準からコピーコンストラクタ –
があるので、コンパイラはそれのための移動のコンストラクタを生成しません:「クラスXの定義は明示的に宣言されていない場合移動コンストラクタは、Xがユーザ宣言されたコピーコンストラクタを持たない場合にのみデフォルトとして暗黙的に宣言されます[...]移動コンストラクタが暗黙的に宣言されていないか明示的に指定されていない場合、コンストラクタは代わりにコピーコンストラクタを呼び出すことができます。 – Pixelchemist
これで何を達成したいですか?それは意味があるようには思えません。 –