我有一个简单的程序:
struct B
{
virtual ~B() {}
};
struct D : public B
{
~D() {}
};
所以,当我调用时,该怎么办?
B* b = new D;
b->~B();
为什么会调用派生类的析构函数?虽然我们通过名称来调用析构函数,但它是虚函数。是否存在一个隐藏的析构函数名称,对于所有的类都相同呢?
我有一个简单的程序:
struct B
{
virtual ~B() {}
};
struct D : public B
{
~D() {}
};
B* b = new D;
b->~B();
析构函数本身没有名字。对于一个类 C
,语法 ~C
被用来代表这个单一的、无名的析构函数。
在你的情况中,~B
简单地表示“析构函数”。由于它是虚拟的,所以在运行时会发生动态调度,并调用 D
的析构函数。
如果你做了这个:
b->B::~B();
这将禁用动态分派(就像任何其他限定调用一样),并且您只会调用 B
的析构函数。