2017-06-06 5 views
0

C++ 11まで、私はstd::vector<T>が必要と思いますTはCopyAssignableとCopyConstructibleになります(容量を拡張するにはオブジェクトを別のメモリ位置にコピーする必要があります)。しかし、あなたがv1 = v0をしたら、私はそれが実際に値をコピーすると仮定します。CopyAssignable/CopyConstructibleを必要としない標準コンテナは何ですか?

value_typeの機能を必要としない標準容器がありますか?

そうでなければ、私はコピー可能/割り当て可能ではないタイプを持っていますが、どのコンテナが移植可能でどれくらい安全ですか?

答えて

1

cppreference.comの要素に課される要件は、容器上に実行される実際の操作に依存します。一般に、要素型は完全型であり、消去可能の要件を満たすことが要求されるが、多くのメンバ関数はより厳しい要求を課す。

特に、std::vector<std::unique_ptr<T>>(一部の完全なT)は、CopyAssignable/non-CopyConstructible以外のコンテナです。

+0

実際にはそうではありません。私は削除コピーコンストラクタを持つクラスを持っており、同じコードはg ++ 6/7でうまく動作しますが、g ++ 5.4では失敗します。おそらく、コピーは動きに置き換えられているからです。 –

関連する問題