use*_*289 5 c++ polymorphism inheritance destructor virtual-functions
我有一个简单的程序:
struct B
{
virtual ~B() {}
};
struct D : public B
{
~D() {}
};
Run Code Online (Sandbox Code Playgroud)
所以,当我打电话的时候
B* b = new D;
b->~B();
Run Code Online (Sandbox Code Playgroud)
为什么派生类的析构函数被称为?它是虚拟的,但是我们按名称调用析构函数,或者是否存在析构函数的隐藏名称,对于所有类都是相同的?
Rei*_*ica 11
析构函数本身没有名称.对于类C,语法~C用于引用单个无名析构函数.
在你的情况下,~B因此只是意味着"析构者".因为它是虚拟的,动态调度在运行时在D被调用的析构函数中发生.
如果你这样做了:
b->B::~B();
Run Code Online (Sandbox Code Playgroud)
它会禁用动态调度(就像任何其他合格的调用一样)并且你B只调用析构函数.