c++ - Is a virtual destructor needed for your Interface, if you always store it in a shared_ptr? -
c++ - Is a virtual destructor needed for your Interface, if you always store it in a shared_ptr? -
since boost::/std::shared_ptr
have advantage of type-erasing deleter, can nice things like
#include <memory> typedef std::shared_ptr<void> gc_ptr; int main(){ gc_ptr p1 = new int(42); gc_ptr p2 = new float(3.14159); gc_ptr p3 = new char('o'); }
and correctly delete pointer right deleter beingness saved.
if ensure every implementation of interface gets created shared_ptr<interface>
(or make_shared<interface>
), need virtual
destructor? declare virtual
anyways, want know, since shared_ptr
delete type initialized (unless custom deleter given).
i still follow mutual rule classes meant derived:
provide either public virtual destructor or protected non-virtual destructor
the reason cannot command of uses, , simple rule means compiler flag if seek delete
through wrong level in hierarchy. consider shared_ptr
not guarantee phone call appropriate destructor, phone call destructor of static type used argument:
base* foo(); shared_ptr<base> p( foo() );
if base
has public non-virtual destructor , foo
returns type derives base
, shared_ptr
fail phone call right destructor. if destructor of base
virtual, fine, if protected, compiler tell there error there.
c++ boost c++11 shared-ptr virtual-destructor
Comments
Post a Comment