다음을 통해 공유


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();
}
  

참고 항목

참조

__declspec

C++ 키워드