在C++中,为什么有时必须将析构函数声明为虚函数?如果这是必要的,那么为什么C++不把虚析构函数默认设置为虚函数?
如果将一个子类的对象地址赋值给一个父类的指针,这样在delete这个基类的指针时,如果没有将基类的析构函数声明为虚函数,则没法调用到子类的析构函数,如果子类的析构函数中有释放资源,则会导致资源没释放,导致资源泄漏。
如果你使用MFC,并且以CObject或其派生类为基类,那么MFC已经为你做了这件事情。CObject的析构函数就被设置为虚函数了:
class AFX_NOVTABLE CObject
{
public:
// Object model (types, destruction, allocation)
virtual CRuntimeClass* GetRuntimeClass() const;
virtual ~CObject() = 0; // virtual destructors are necessary
// Diagnostic allocations