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 전용 종료

참고 항목

__declspec
키워드