vtordisp
Блок, относящийся только к языку C++
Управляет добавлением скрытого члена смещения конструктора или деструктора vtordisp.
#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, соответствующие параметрам компилятора /vd0, /vd1 и /vd2. Дополнительные сведения см. в разделе /vd (отключение смещений при выполнении конструктора).on
Аналогично параметру #pragma vtordisp(1).off
Аналогично параметру #pragma vtordisp(0).
Заметки
Директива #pragma vtordisp применяется только к коду, в котором используются виртуальные базовые классы. Если в производном классе переопределена виртуальная функция, которую он унаследовал от виртуального базового класса, и если конструктор или деструктор производного класса вызывает эту функцию при помощи указателя на виртуальный базовый класс, то компилятор может вставлять поля vtordisp в классы с виртуальными базовыми классами.
Директива #pragma vtordisp влияет на структуру классов, которые ей следуют. Параметры /vd0, /vd1 и /vd2 определяют аналогичное поведение для целых модулей. Если задано значение 0 или off, то добавление скрытых членов vtordisp отключается. Директиву #pragma vtordisp рекомендуется отключать только в тех случаях, когда конструкторы и деструкторы класса гарантированно не смогут вызывать виртуальные функции объекта, на который указывает указатель this.
Если задано значение по умолчанию 1 или on, то скрытые члены vtordisp добавляются там, где они необходимы.
Если указано значение 2, то скрытые члены vtordisp добавляются ко всем виртуальным базовым классам с виртуальными функциями. Значение vtordisp(2) может быть необходимым для того, чтобы оператор dynamic_cast правильно применялся к частично сконструированным объектам. Дополнительные сведения см. в разделе Предупреждение компилятора (уровень 1) C4436.
Директива #pragma vtordisp() без аргументов восстанавливает исходное значение vtordisp.
#pragma vtordisp(push, 2)
class GetReal : virtual public VBase { ... };
#pragma vtordisp(pop)
Завершение блока, относящегося только к языку C++