1. ホーム
  2. c++

[解決済み】std::vectorはpush_backでオブジェクトをコピーしているのか?

2022-04-13 23:59:55

質問

valgrindでいろいろ調べた結果、std::vectorはpush_backしたいオブジェクトのコピーを作るという結論に達しました。

本当にそうでしょうか?ベクターはコピーなしでオブジェクトの参照やポインタを保持することはできないのですか?

ありがとうございます。

解決方法は?

はい。 std::vector<T>::push_back() は引数のコピーを作成し、vector に格納します。 オブジェクトへのポインタをベクターに格納したい場合は、ベクター内に std::vector<whatever*> の代わりに std::vector<whatever> .

しかし、ポインタが参照するオブジェクトは、ベクタがその参照を保持している間、有効であることを確認する必要があります(RAIIイディオムを利用したスマートポインタで問題は解決します)。