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?