Kus*_*wal 4 c++ virtual-destructor
这里有人回答说我们无法获得析构函数的函数指针, 然后虚函数如何在下面的代码中工作.虚拟构造函数是否保存在虚拟表中?如果没有那么虚拟机构在虚拟析构函数的情况下如何工作?
#include<stdio.h>
class Base
{
public:
Base()
{
printf("C-Base\n");
}
virtual ~Base()
{
printf("Base\n");
}
};
class Derived:public Base
{
public:
Derived()
{
printf("C-DErived\n");
}
~Derived()
{
printf("DErived\n");
}
};
int main()
{
Base *b=new Derived();
delete b;
}
Run Code Online (Sandbox Code Playgroud)
在这段代码中,如果我们不在Base类中使用虚函数,则Destructor Derived类析构函数不会被调用.
AnT*_*AnT 10
当有人说你无法获得指向析构函数的指针时,就意味着没有源代码级语法.但是在底层,析构函数仍然是一个普通的函数,它通常通过存储在虚拟表中的指针来访问.
换句话说,它是具体的你,谁不能获得这样的指针.编译器本身在获取它时没有任何问题.Quod licet Iovi non licet bovi.
只是因为你无法得到一个指向析构函数的指针,并不意味着编译器不能为自己的内部,恶意目的.
(作为旁注,编译器经常生成多个析构函数版本,在vtable中有多个条目,这使得它与普通函数指针不兼容.)