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
结束 Microsoft 专用
另请参阅
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈