大多数派生类的析构函数中的纯虚拟调用

mch*_*hen 0 c++ virtual-functions

我知道你不应该在基类的ctor或dtor中调用任何虚函数,但是从派生类最多的那个呢?应该没事吧?例如

class base {
    ...
    virtual void free() = 0;
};
class child : public base {
    ...
    free() {/* free memory */}
    ~child() {free();}
};
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 7

好吧,你可以做到,但*this内部的动态类型child::~child()child,而不是任何更多的派生.因此,当您有一个class foo : child覆盖的进一步派生类时,free()不会调用被覆盖的函数.