为什么抽象类的VTABLE包含虚拟地址而不是NULL?

时间:2016-12-07 11:29:18

标签: c++ g++ abstract-class vtable

class abstract
{
public:
   virtual void function(void) = 0;
};

class d_abstract : public abstract
{
public:
   void function(void) {}
};

我在g ++编译器中使用“-fdump-class-hierarchy”选项为上面的类生成了VTABLE。两个类的VTABLE如下:

 Vtable for abstruct
 abstruct::_ZTV8abstruct: 3u entries
 0     (int (*)(...))0
 8     (int (*)(...))(& _ZTI8abstruct)
 16    (int (*)(...))__cxa_pure_virtual

 Vtable for d_abstract
 d_abstract::_ZTV10d_abstract: 3u entries
 0     (int (*)(...))0
 8     (int (*)(...))(& _ZTI10d_abstract)
 16    (int (*)(...))d_abstract::function

在d_abstract类中,VTABLE包含 d_abstract :: function 的地址。但为什么 __ cxa_pure_virtual 的虚拟地址而不是 NULL 存储在抽象类的VTABLE中?

0 个答案:

没有答案