【问题标题】:Is there any relation between Virtual destructor and VtableVirtual析构函数和Vtable之间是否有任何关系
【发布时间】:2009-09-17 03:43:48
【问题描述】:

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

【问题讨论】:

    标签: c++ virtual vtable


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        是的。抱歉,我没有明确的参考来支持我的断言。但是如果只使用一个指向对象的指针,你会如何获得不同的行为呢?

        【讨论】:

        • 还有其他实现虚方法的机制。 vtables 只是最常见的(并且易于实现)。
        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          它被视为任何其他普通函数,并将被添加到 vtable 中。

          【讨论】:

            【解决方案6】:
            猜你喜欢
            • 2020-06-16
            • 2012-03-10
            • 2017-05-31
            • 2018-02-24
            • 2017-08-10
            • 2018-08-29
            • 1970-01-01
            • 1970-01-01
            • 2016-03-04
            相关资源
            最近更新 更多