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?
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:
If you need to store unique pointers (with no sharing):