由于boost::/std::shared_ptr
具有类型擦除其删除器的优势,因此您可以做一些不错的事情,例如
#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');
}
由于保存了正确的删除器,这将正确删除所有指针。
如果你确保你的接口的每个实现总是用shared_ptr<Interface>
(or make_shared<Interface>
) 创建,你真的需要一个virtual
析构函数吗?无论如何我都会声明它virtual
,但我只想知道,因为shared_ptr
将始终删除它初始化的类型(除非给出另一个自定义删除器)。