为什么C++不会默认将至少有一个其他虚函数的类的析构函数设置为虚函数?在这种情况下,添加虚析构函数对我来说没有成本,而不拥有虚析构函数几乎总是一个错误。 C ++0x会解决这个问题吗?
为什么C++不会默认将至少有一个其他虚函数的类的析构函数设置为虚函数?在这种情况下,添加虚析构函数对我来说没有成本,而不拥有虚析构函数几乎总是一个错误。 C ++0x会解决这个问题吗?
struct base {
virtual void foo() const = 0;
virtual void bar () const = 0;
};
struct derived: base {
void foo() const {}
void bar() const {}
};
std::shared_ptr<base>
make_base()
{
return std::make_shared<derived>();
}
std::shared_ptr
使用类型擦除;即使最后一个触发销毁的std::shared_ptr
类型是std::shared_ptr<void>
,最终调用delete
将删除一个derived*
。std::shared_ptr
的这种行为并非专门针对虚拟析构函数而设计;它还有其他各种用途(例如std::shared_ptr<FILE> { std::fopen( ... ), std::fclose }
)。然而,由于这种技术已经支付了一些间接性的成本,因此一些用户可能不感兴趣为他们的基类提供虚拟析构函数。这就是“只为所需付费”的意思。