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++ 关键字