这真的取决于你的情况。
如果您的对象很小,并且复制对象是轻量级的,那么在我看来,将数据存储在 stl 容器中很简单且更易于管理,因为您不必担心生命周期管理。
如果您的对象很大,并且具有默认构造函数没有意义,或者对象的副本很昂贵,那么使用指针存储可能是要走的路。
如果您决定使用指向对象的指针,请查看Boost Pointer Container Library。这个 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 算法一起工作,这非常方便。
还有一些工具可以将容器中指针的所有权转移给调用者(通过大多数容器中的释放函数)。