如果我们编写虚函数,它会在该类的对象中添加一个 vtable。虚拟析构函数也是如此吗?是vtable用来实现析构函数的虚化吗
问问题
2092 次
6 回答
5
是的。当通过基类指针删除对象时,需要一些信息来允许调用正确的析构函数。该信息是小整数索引还是指针并不重要(尽管动态链接可能暗示它是指针)。自然地,该信息需要与指向对象相邻(内部)。
将任何类型的虚方法(包括析构函数)添加到以前没有的类中,都会增加 sizeof(class)。
于 2009-09-17T03:50:41.247 回答
4
我不相信 C++ 标准需要任何特定的机制来产生正确的行为,但是是的,这是一个典型的实现。一个至少有 1 个虚函数的类有一个(虚)函数指针表,析构函数就是其中之一,如果它被标记为虚函数的话。
于 2009-09-17T03:46:21.980 回答
2
是的。抱歉,我没有明确的参考来支持我的断言。但是当只使用一个指向对象的指针时,你会如何获得不同的行为呢?
于 2009-09-17T03:45:48.603 回答
2
是的。虚拟析构函数与任何其他虚拟方法一样。将添加 Vtable 条目。
于 2009-09-17T03:47:19.047 回答
0
它被视为任何其他正常功能,并将被添加到 vtable 中。
于 2009-09-17T03:57:19.057 回答
0
于 2009-09-17T03:59:41.470 回答