这真的取决于您的情况。
如果您的对象很小,并且做对象的副本很轻便,那么在我看来,将数据存储在stl容器中非常简单,而且更易于管理,因为您不必担心生命周期管理。
如果您的对象很大,并且没有默认的构造函数,或者对象的副本很昂贵,那么使用指针存储可能是解决之道。
如果决定使用指向对象的指针,请查看Boost指针容器库。这个boost库包装了所有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算法,这确实非常方便。
还有一些用于将容器中指针的所有权转移到调用者的功能(通过大多数容器中的释放功能)。