/vd (отключение смещений при выполнении конструктора)
Обновлен: Ноябрь 2007
Параметр /vd поддерживает неверное поведение в более ранней версии Visual C++ и больше не требуется.
/vdn
Аргументы
0
Удаляет член смещения конструктора или деструктора vtordisp. Этот аргумент следует использовать только в том случае, если точно известно, что все конструкторы и деструкторы классов вызывают виртуальные функции виртуально.1
Включает создание скрытых членов смещения конструктора или деструктора vtordisp. Этот аргумент используется по умолчанию.2
Позволяет применять dynamic_cast Operator к создаваемому объекту. В качестве примера можно привести динамическое приведение dynamic_cast виртуального базового класса к производному классу.Если имеется виртуальный базовый класс с виртуальными функциями, то параметр /vd2 добавляет поле vtordisp. Параметра /vd1 должно быть достаточно. Наиболее распространенный случай, когда необходим параметр /vd2, состоит в том, что единственной виртуальной функцией в виртуальном базовом классе является деструктор.
Заметки
Эти параметры применяются только для кода C++, использующего виртуальные базовые классы.
В Visual C++ реализуется поддержка смещения при выполнении конструктора в C++ в ситуациях, когда используется виртуальное наследование. Смещения в ходе выполнения конструктора решают проблему, возникающую, когда виртуальная функция, объявленная в виртуальном базовом классе и переопределенная в производном классе, вызывается из конструктора при создании следующего производного класса.
Проблема состоит в том, что в результате несоответствий между смещениями для виртуальных базовых классов класса и смещениями его производных классов виртуальной функции может быть передан неверный указатель this. В качестве решения для всех виртуальных базовых классов класса предоставляется одиночное корректирующее смещение для конструктора, называемое полем vtordisp.
По умолчанию поля vtordisp вводятся всякий раз, когда в коде определяются пользовательские конструкторы и деструкторы, а также переопределяются виртуальные функции виртуальных базовых классов.
Эти параметры воздействуют на все исходные файлы. Чтобы отключить поля vtordisp и затем повторно включить их на поклассовой основе, следует использовать параметр vtordisp.
Установка параметра компилятора в среде разработки Visual Studio
Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.
Щелкните папку C/C++.
Щелкните страницу свойств Командная строка.
Введите параметр компилятора в поле Дополнительные параметры.
Установка параметра компилятора программным способом
- См. раздел AdditionalOptions.