vtordisp
pragma
Управляет добавлением скрытого vtordisp
элемента смещения и разрушения. Предназначено vtordisp
pragma для 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)
.
Замечания
Применимо vtordisp
pragma только к коду, использующего виртуальные базы. Если производный класс переопределяет виртуальную функцию, наследуемую от виртуального базового класса, и если конструктор или деструктор для производного класса вызывает функцию с помощью указателя на виртуальный базовый класс, компилятор может ввести дополнительные скрытые vtordisp
поля в классы с виртуальными базами.
Влияет vtordisp
pragma на макет классов, которые следуют за ним. Параметры /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)