다음을 통해 공유


vtordisp pragma

숨겨진 vtordisp 생성/소멸 변위 멤버의 추가를 제어합니다. C vtordisppragma ++고유입니다.

구문

#pragma vtordisp( [ push, ] n )
#pragma vtordisp(pop)
#pragma vtordisp()
#pragma vtordisp( [ push, ] { on | off } )

매개 변수

push
내부 컴파일러 스택에서 현재 vtordisp 설정을 푸시하고 새 vtordisp 설정을 n으로 설정합니다. n을 지정하지 않으면 현재 vtordisp 설정이 변경되지 않습니다.

pop
내부 컴파일러 스택에서 상위 레코드를 제거하고 제거된 값으로 설정을 복원합니다 vtordisp .

n
설정의 새 값을 vtordisp 지정합니다. 가능한 값은 0, 1또는 2, /vd1/vd2 컴파일러 옵션에 /vd0해당하는 값입니다. 자세한 내용은 (생성 변위 사용 안 함)을 참조 /vd 하세요.

on
#pragma vtordisp(1)과 동일합니다.

off
#pragma vtordisp(0)과 동일합니다.

설명

가상 vtordisppragma 베이스를 사용하는 코드에만 적용됩니다. 파생 클래스가 가상 기본 클래스에서 상속하는 가상 함수를 재정의하고 파생 클래스의 생성자 또는 소멸자가 가상 기본 클래스에 대한 포인터를 사용하여 해당 함수를 호출하는 경우 컴파일러는 가상 기반이 있는 클래스에 추가 숨겨진 vtordisp 필드를 도입할 수 있습니다.

뒤에 vtordisppragma 있는 클래스의 레이아웃에 영향을 줍니다. /vd0, /vd1/vd2 컴파일러 옵션은 전체 모듈에 대해 동일한 동작을 지정합니다. 숨겨진 vtordisp 멤버를 0 지정하거나 off 표시하지 않습니다. 클래스의 생성자와 소멸자가 포인터가 가리키는 this 개체에서 가상 함수를 호출할 가능성이 없는 경우에만 해제 vtordisp 합니다.

1 기본값을 지정하거나 on지정하면 필요한 경우 숨겨진 vtordisp 멤버를 사용할 수 있습니다.

지정하면 2 가상 함수가 있는 모든 가상 베이스에 대해 숨겨진 vtordisp 멤버를 사용할 수 있습니다. #pragma vtordisp(2) 는 부분적으로 생성된 개체의 dynamic_cast 올바른 성능을 보장하기 위해 필요할 수 있습니다. 자세한 내용은 컴파일러 경고(수준 1) C4436을 참조하세요.

#pragma vtordisp()인수 없이 설정을 초기 설정으로 복원합니다 vtordisp .

#pragma vtordisp(push, 2)
class GetReal : virtual public VBase { ... };
#pragma vtordisp(pop)

참고 항목

Pragma 지시문 및 __pragma _Pragma 키워드