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 特定的
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應