1
コンストラクタを移動するのが新しく、VS2010の動作と全く混同します。私は、リストの据え付けを使用し、クラスAのインスタンスを入れるとコンストラクタ、非constコピーコンストラクタ、リストのemplaceをVS2010に移動します。
A(A&& input) {some code}
: 私は、私の知る限りでは、このようなものです(クラスAの)移動コンストラクタを設計
mylist.emplace(a);
私の移動のコンストラクタです呼ばれ、非constコピーコンストラクタが代わりに呼び出されません。
A(A& input) {the same code as move constructor}
一方、私はこれを行うとき:
mylist.emplace(A(2));
私の移動コンストラクタは、想定されているように呼び出されます。だから、私の質問は:
- リストのemplaceが私の移動コンストラクタの代わりに非constコピーコンストラクタを呼び出すのはなぜですか?
- 非constコピーコンストラクタは、実際には移動コンストラクタを定義する別の方法ですか?
- この動作は正しいですか(C++ 0xコンパイラの場合)か、それともVS2010の動作ですか?
ありがとうございます。
コピーコンストラクタの動作が移動コンストラクタと同じ場合は、クラスが大きく壊れていませんか? – UncleBens
@UncleBens:必ずしも両方ともコピーを作成する必要はありません。 – ybungalobill
@ybungalobill:そのような場合、なぜmoveコンストラクタを定義する(おそらく無効にするのではなく)のですか?コピーコンストラクタがコピーを作成する場合、なぜ非const参照を取るべきですか? – UncleBens