2016-11-22 7 views
-2

すでにベクトルに入っているオブジェクトは、ベクトルの再割り当て時にコピーされています。ベクトルのすべてのオブジェクトにコピーコンストラクタが必要ですか?

これはなぜですか?彼らはただ動かされてはいけませんか?また、これは、ベクトルに格納されたオブジェクトのコピーコンストラクタを記述することが期待されることを意味しますか? C++ referenceから

+0

これはかなり明確に[ここ](http://en.cppreference.com/w/cpp/container/vector)に記載されています。 C++ 11以降、要素は「消去可能」という概念を満たしています。 –

答えて

3

:C++ 11の登場までは

は、ベクトルの要素は、CopyAssignableCopyConstructibleの要件を満たしている必要があります。

C++ 11からC++ 17まで、要素に課される要件は、コンテナに対して実行される実際の操作によって異なります。一般に、要素型は完全型であり、Erasableという要件を満たしている必要がありますが、多くのメンバ関数は厳しい要件を課しています。

C++ 17以降では、要素に課される要件は、コンテナで実行される実際の操作によって異なります。一般に、要素タイプはErasableの要件を満たしている必要がありますが、多くのメンバー関数は厳しい要件を課しています。アロケータがアロケータの完全性要件を満たす場合、このコンテナ(メンバーではない)は不完全な要素型でインスタンス化できます。

関連する問題