novtable
Microsoft 전용
이 __declspec 확장 된 속성입니다.
이 폼의 __declspec 는 클래스 선언에 적용할 수 있지만 순수 인터페이스 클래스를, 클래스 자체를 인스턴스화할 합니다에 적용 해야 합니다.__declspec Vfptr constructor(s) 및 소멸자는 클래스의 초기화 코드를 생성 하는 컴파일러가 중지 합니다.대부분의 경우이 클래스와 연결 된 유일한 참조 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();
}