これは本当にあなたの状況に依存します。
オブジェクトが小さく、オブジェクトのコピーを実行するのが軽量な場合、stlコンテナー内にデータを格納するのは簡単で、寿命の管理について心配する必要がないため、私の意見では管理が簡単です。
オブジェクトが大きく、デフォルトのコンストラクターを使用しても意味がない場合や、オブジェクトのコピーにコストがかかる場合は、ポインターを使用して保存する方法が適しています。
オブジェクトへのポインターを使用する場合は、Boost Pointer Container Libraryをご覧ください。このブーストライブラリは、動的に割り当てられたオブジェクトで使用するすべてのSTLコンテナーをラップします。
各ポインターコンテナー(ptr_vectorなど)は、コンテナーに追加されるときにオブジェクトの所有権を取得し、それらのオブジェクトの有効期間を管理します。また、参照により、ptr_コンテナ内のすべての要素にアクセスします。これにより、次のようなことができます
class BigExpensive { ... }
// create a pointer vector
ptr_vector<BigExpensive> bigVector;
bigVector.push_back( new BigExpensive( "Lexus", 57700 ) );
bigVector.push_back( new BigExpensive( "House", 15000000 );
// get a reference to the first element
MyClass& expensiveItem = bigList[0];
expensiveItem.sell();
これらのクラスはSTLコンテナーをラップし、すべてのSTLアルゴリズムで動作します。これは本当に便利です。
コンテナー内のポインターの所有権を(ほとんどのコンテナーのリリース関数を介して)呼び出し元に転送する機能もあります。