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:
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));
If each instance of A
is stored in multiple containers, then you must store (smart) pointers instead of the objects themselves. Otherwise each container would have its own unique copy. Modifying an instance in one container would not affect the others. Even if you're not modifying anything, storing full object copies doesn't say what you mean, i.e., that the instances across the containers are really the same.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With