Virtual析构函数和Vtable之间是否存在任何关系

时间:2009-09-17 03:43:49

标签: c++ virtual vtable

如果我们编写虚函数,它会在该类的对象中添加一个vtable。虚拟析构函数也是如此吗? vtable用于实现析构函数的虚拟性

6 个答案:

答案 0 :(得分:5)

是。当通过基类指针删除对象时,需要一些信息来允许调用正确的析构函数。该信息是小整数索引还是指针无关紧要(尽管动态链接可能意味着它是一个指针)。当然,该信息需要与指向对象相邻(内部)。

将任何类型的虚方法(包括析构函数)添加到之前没有的类,都会增加sizeof(class)。

答案 1 :(得分:4)

我不相信C ++标准需要任何特定的机制来产生正确的行为,但是,这是一个典型的实现。具有至少1个虚函数的类具有(虚拟)函数指针表,如果它被标记为虚拟,则析构函数是其中之一。

答案 2 :(得分:2)

是的。对不起,我没有明确的参考来支持我的断言。但是当你只使用一个指向对象的指针时,你还会得到不同的行为吗?

答案 3 :(得分:2)

是。虚拟析构函数就像任何其他虚拟方法一样。 Vtable条目将被添加。

答案 4 :(得分:0)

它被视为任何其他正常功能,并将被添加到vtable。

答案 5 :(得分:0)

相关问题