Поделиться через


vtordisp pragma

Управляет добавлением скрытого vtordisp элемента смещения и разрушения. Предназначено vtordisppragma для C++.

Синтаксис

#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/vd0и /vd2 параметров компилятора. Дополнительные сведения см. в разделе /vd (Отключение перемещений конструкций)

on
Эквивалент #pragma vtordisp(1).

off
Эквивалент #pragma vtordisp(0).

Замечания

Применимо vtordisppragma только к коду, использующего виртуальные базы. Если производный класс переопределяет виртуальную функцию, наследуемую от виртуального базового класса, и если конструктор или деструктор для производного класса вызывает функцию с помощью указателя на виртуальный базовый класс, компилятор может ввести дополнительные скрытые vtordisp поля в классы с виртуальными базами.

Влияет vtordisppragma на макет классов, которые следуют за ним. Параметры /vd0компилятора /vd1и /vd2 параметров компилятора указывают одинаковое поведение для полных модулей. Указание или off подавление 0 скрытых vtordisp элементов. Отключите только vtordisp в том случае, если конструкторы и деструкторы класса вызывают виртуальные функции объекта, на который указывает this указатель.

Указание или on, по 1 умолчанию, включает скрытые 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 слова