Store Object or Pointer in a Vector

c++, oop

Solution

If you need copies of objects - use objects. If you need to share objects or polymorphic behavior is desired - use containers of `smart pointers`. In case of using smart pointers you will both have automatic object destruction and polymorphic behavior.

For example:

std::vector<std::shared_ptr<MyObject>> v;
auto ptr = std::shared_ptr<MyObject>(new MyObject());
v.push_back(ptr);

If you need to store unique pointers (with no sharing):

std::vector<std::unique_ptr<MyObject>> v;
auto ptr = std::unique_ptr<MyObject>(new MyObject());
v.push_back(std::move(ptr));

Problem

I asked a very similar question here but since it is such a fundamental issue I would like to state my (new) question more precicely. Say I have a very complex class A and each instance of A is stored in multiple containers such as vectors, queues,... Even in a static setting, meaning that the objects get added to the containers once and will not be deleted nor modified: Should the containers now contain pointers to the objects or the objects itself?

Original source

Related problems