【发布时间】:2011-06-13 10:10:59
【问题描述】:
boost::smart_ptr如scoped_ptr和shared_ptr可以用在多态中吗?
class SomeClass
{
public:
SomeClass()
{
a_ptr.reset(new SubClass);
}
private:
boost::scoped_ptr<SuperClass> a_ptr;
}
【问题讨论】:
-
我想是时候开始寻找循环引用了。 :)
-
@Jonathan:你的析构函数是虚拟的吗?
-
@Jonathan:
virtualdtor 需要在基类中。struct与class无关紧要。查看我更新的帖子。 -
事实上,当使用
shared_ptr时,即使基类析构函数不是虚拟的,你也几乎总是安全的。 -
@Philip - 不完全正确。 shared_ptr 构造函数除了一个类型为 T 的指针(T 是任何类型,而不是实例化 shared_ptr 所用的类型)之外,还接受一个“删除器”作为参数。此参数默认调用类型为 T 的指针的 delete(同样,构造函数的 T,而不是 ptr)。因此,只要您使用最派生的类型构造 shared_ptr ,即使没有虚拟析构函数,它也可以正常工作。如果你不...那么你只是在头骨底部刺伤了自己。
标签: c++ boost boost-smart-ptr