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();
}
In Y

END Microsoft 特定的

另請參閱

__declspec
關鍵字