【发布时间】:2009-09-17 03:43:48
【问题描述】:
如果我们编写虚函数,它会在该类的对象中添加一个 vtable。虚拟析构函数也是如此吗?是vtable用来实现析构函数的虚吗
【问题讨论】:
如果我们编写虚函数,它会在该类的对象中添加一个 vtable。虚拟析构函数也是如此吗?是vtable用来实现析构函数的虚吗
【问题讨论】:
是的。当通过基类指针删除对象时,需要一些信息来允许调用正确的析构函数。该信息是小整数索引还是指针并不重要(尽管动态链接可能暗示它是指针)。自然,该信息需要与指向的对象相邻(内部)。
向以前没有的类添加任何类型的虚方法,包括析构函数,都会增加 sizeof(class)。
【讨论】:
我不认为 C++ 标准需要任何特定的机制来产生正确的行为,但是是的,这是一个典型的实现。一个至少有 1 个虚函数的类有一个(虚)函数指针表,析构函数就是其中之一,如果它被标记为虚函数的话。
【讨论】:
是的。抱歉,我没有明确的参考来支持我的断言。但是如果只使用一个指向对象的指针,你会如何获得不同的行为呢?
【讨论】:
是的。虚拟析构函数与任何其他虚拟方法一样。将添加 Vtable 条目。
【讨论】:
它被视为任何其他普通函数,并将被添加到 vtable 中。
【讨论】: