重複の可能性:
移動元のオブジェクトで何ができますか?
たとえば、次のコードを参照してください。
template<class T>
void swap(T& a, T& b)
{
T tmp(std::move(a));
a = std::move(b);
b = std::move(tmp);
}
それは私だけですか、それともここにバグがありますか?あなたがmove
a
に入るならtmp
、それからa
無効になりませんか?
つまり、move-assignmentをa
fromb
に配置して、move-constructor呼び出しにするべきではありませんnew
か?
そうでない場合、ムーブコンストラクタとムーブ代入演算子の違いは何ですか?
template<class T>
void swap(T& a, T& b)
{
T tmp(std::move(a));
new(&a) T(std::move(b));
new(&b) T(std::move(tmp));
}