novtable

Microsoft 专用

这是 __declspec 扩展的属性。

__declspec 的此窗体将它应用到任何类声明,但是,应仅适用于纯接口类,也就是说,都不会实例化的类。__declspec 从生成代码初始化在类的构造函数和析构函数的 vfptr 停止编译器。在许多情况下,这将删除唯一对与类,因此,因此,链接器将移除的 vtable。使用 __declspec 的此窗体可以导致代码大小显着降低。

如果尝试实例化标记为的类 novtable 然后访问类成员,您将收到访问冲突 (AV)。

示例

// novtable.cpp
#include <stdio.h>

struct __declspec(novtable) X {
   virtual void mf();
};

struct Y : public X {
   void mf() {
      printf_s("In Y\n");
   }
};

int main() {
   // X *pX = new X();
   // pX->mf();   // Causes a runtime access violation.

   Y *pY = new Y();
   pY->mf();
}
  

请参见

参考

__declspec

C++关键字