1. ホーム
  2. c++

[解決済み] コンテナには、オブジェクト全体とオブジェクトへのポインタのどちらを格納すべきですか?

2022-04-24 14:35:59

質問

新しいシステムを一から設計しています。 STLを使って、ある長寿命オブジェクトのリストとマップを保存するつもりです。

質問です。 それとも、ライフ&スタンプを自分で管理して、それらのオブジェクトへのポインタをSTLコンテナに格納する方が一般的に良いですか?

しかし、私はこれらのソリューションの両方が可能であることを知っているので、もしそれが存在するならば、私は"理論的"より良い答えを探しているのです。

ポインターを使った遊びには、2つの非常にわかりやすいデメリットがあります。 1) これらのオブジェクトのアロケーション/ディロケーションをSTLを超えたスコープで自分で管理する必要がある。 2) スタック上にtempオブジェクトを作成し、コンテナに追加することができない。

他に何か足りないものはありますか?

解決方法は?

ポインターを使うことの効率性を指摘する声が上がっているので。

std::vector の使用を検討している場合、更新が少なく、コレクションを繰り返し使用することが多く、非多相型であれば、オブジェクトの "copies" を格納する方が参照の局所性が得られるため、効率が良くなります。

一方、更新が頻繁に行われる場合は、ポインタを保存することで、コピーと再配置のコストを削減することができます。