クラスIdを使用するオブジェクトAの移動コンストラクタを実装しようとしています。クラスIDが自動的に生成され、将来のコーディングのために私はそうするときにデフォルトのコンストラクタを削除することを選択しました。しかしC++削除されたデフォルトのコンストラクタを持つオブジェクトに対してスワップを使用できない理由
私はIdのデフォルトコンストラクタがを削除されたことを不平を言っているAの移動のコンストラクタでスワップを使用してみてください。スワップは新しいオブジェクトを作成していないと思っていましたが、2つのアイテムのアドレスを交換するだけでした。
私はそれを誤解していますが、実際にはIdの3番目の一時的なインスタンスを作成していますか?
この場合、移動コンストラクタを実装する最善の方法は何ですか?
私は以下の最低限の例が含まれている:あなたは問題がない、Id
オブジェクトにswap
を使用することができます
In constructor 'A::A(A&&)':
21:18: error: use of deleted function 'Id::Id()'
8:5: note: declared here
In file included from /usr/include/c++/4.9/bits/stl_pair.h:59:0,
from /usr/include/c++/4.9/bits/stl_algobase.h:64,
from /usr/include/c++/4.9/bits/char_traits.h:39,
from /usr/include/c++/4.9/ios:40,
from /usr/include/c++/4.9/ostream:38,
from /usr/include/c++/4.9/iostream:39,
from 2:
/usr/include/c++/4.9/bits/move.h: In instantiation of 'void std::swap(_Tp&, _Tp&) [with _Tp = A]':
34:17: required from here
/usr/include/c++/4.9/bits/move.h:176:11: error: use of deleted function 'A& A::operator=(const A&)'
__a = _GLIBCXX_MOVE(__b);
^
15:7: note: 'A& A::operator=(const A&)' is implicitly declared as deleted because 'A' declares a move constructor or move assignment operator
In file included from /usr/include/c++/4.9/bits/stl_pair.h:59:0,
from /usr/include/c++/4.9/bits/stl_algobase.h:64,
from /usr/include/c++/4.9/bits/char_traits.h:39,
from /usr/include/c++/4.9/ios:40,
from /usr/include/c++/4.9/ostream:38,
from /usr/include/c++/4.9/iostream:39,
from 2:
/usr/include/c++/4.9/bits/move.h:177:11: error: use of deleted function 'A& A::operator=(const A&)'
__b = _GLIBCXX_MOVE(__tmp);
を初期化する必要がありますか? –