vtordisp
pragma
숨겨진 vtordisp
생성/소멸 변위 멤버의 추가를 제어합니다. C vtordisp
pragma ++고유입니다.
구문
#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)
과 동일합니다.
설명
가상 vtordisp
pragma 베이스를 사용하는 코드에만 적용됩니다. 파생 클래스가 가상 기본 클래스에서 상속하는 가상 함수를 재정의하고 파생 클래스의 생성자 또는 소멸자가 가상 기본 클래스에 대한 포인터를 사용하여 해당 함수를 호출하는 경우 컴파일러는 가상 기반이 있는 클래스에 추가 숨겨진 vtordisp
필드를 도입할 수 있습니다.
뒤에 vtordisp
pragma 있는 클래스의 레이아웃에 영향을 줍니다. /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)