81

ベクトルは、再割り当て時に要素を移動またはコピーするかどうかを決定する前に、移動コンストラクターが noexcept としてラベル付けされているかどうかを確認するようです。デフォルトの移動コンストラクターは noexcept として定義されていますか? 次のドキュメントを見ましたが、これを指定していませんでした。http://en.cppreference.com/w/cpp/language/move_constructor

暗黙的に宣言されたムーブ コンストラクター

クラス型 (構造体、クラス、または共用体) に対してユーザー定義の移動コンストラクターが提供されておらず、次のすべてが当てはまる場合: ユーザー宣言されたコピー コンストラクターがない ユーザー宣言されたコピー代入演算子がないユーザー宣言の移動代入演算子 ユーザー宣言のデストラクタがない 暗黙的に宣言された移動コンストラクタが、次のセクションで詳述する条件により削除済みとして定義されていない場合、コンパイラは移動コンストラクタをそのクラスのインライン パブリック メンバーとして宣言します。 signature T::T(T&&) クラスは、T::T(const T&&) と T::T(T&&) の両方など、複数の移動コンストラクタを持つことができます。ユーザー定義のムーブ コンストラクターが存在する場合でも、ユーザーはキーワード default を使用して、暗黙的に宣言されたムーブ コンストラクターの生成を強制できます。

4

1 に答える 1