Cha*_*mon 4 c++ polymorphism vtable
我对虚拟析构函数和虚函数表有一些具体问题。
假设我有以下代码:
class Base
{
public:
virtual ~Base();
};
class Child : public Base
{
public:
~Child();
};
Run Code Online (Sandbox Code Playgroud)
问题:
下面的解释假设编译器使用的虚拟调度实现是基于虚拟表的。
每个具有虚拟方法(声明或继承)的类都有自己的虚拟表。如果子类重写了基类中的虚拟成员函数,则指向重写函数的指针将放置在该类的 vtable 中;否则,指向基类实现的指针将保留在适当的位置。
添加第一个虚函数会按 vtable 指针的大小增加类实例的大小。第一个之后的虚拟函数不会增加实例的大小。
由于~Base是虚拟的,因此~Child即使virtual省略关键字,也是虚拟的。在覆盖的情况下,virtual关键字是可选的。
| 归档时间: |
|
| 查看次数: |
4849 次 |
| 最近记录: |