共用方式為


novtable

Microsoft 專有的

這是__declspec的延伸的屬性。

這種形式的__declspec可套用至任何類別宣告中,但只應該套用到純虛擬介面類別,也就是無法被執行個體化各自獨立的類別。__declspec停止編譯器產生程式碼來初始化在 constructor(s) 和解構函式類別的 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 + + 關鍵字