Это действительно зависит от вашей ситуации.
Если ваши объекты маленькие, а копирование объекта является легким, то хранение данных в контейнере 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, что очень удобно.
Существуют также средства для передачи владения указателем в контейнере вызывающей стороне (с помощью функции освобождения в большинстве контейнеров).