shared_ptr(sp)额外好处是什么?即使被转为基类,析构函数也可以正常执行。
已知两个类
class foo{};
class bar:foo{public:~bar(){}};
先来看不用sp的情况。
bar* obj = new bar();
delete obj;
这样foo没有虚析构函数,删除foo对象时是不会调用到bar对象的析构函数的。
如果用sp,就可以正常析构了。
sp<foo> obj = make_shared<bar>();
shared_ptr(sp)额外好处是什么?即使被转为基类,析构函数也可以正常执行。
已知两个类
class foo{};
class bar:foo{public:~bar(){}};
先来看不用sp的情况。
bar* obj = new bar();
delete obj;
这样foo没有虚析构函数,删除foo对象时是不会调用到bar对象的析构函数的。
如果用sp,就可以正常析构了。
sp<foo> obj = make_shared<bar>();