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中?