I’m a little confused by using “rule of three” with smart pointers. If I have a class whose only data member is a smart pointer, do I need to explicitly define destructor, copy constructor, and assignment operator?
My understanding is that since smart pointer will handle the resource automatically, then I don’t need to explicitly define destructor, and thus I shouldn’t need to do so for the other two based on rule of three. However, I’m not sure if the default copy constructor is good enough for smart pointers such as shared_ptr.
Thank you for your help!
The default destructor is fine, because the destructor of
shared_ptrwill take care of the deallocation of the object. The default copy constructor may be acceptable depending on your purposes: when you copy the object that owns theshared_ptr, the copy will share ownership with the original. The same would naturally be true of the default assignment operator. If that’s not what you want, define a copy constructor that does otherwise—for instance, that clones the referenced object.