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


/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

  1. Откройте диалоговое окно Страницы свойств проекта. Дополнительные сведения см. в разделе Открытие свойств страниц проекта.

  2. Щелкните папку C/C++.

  3. Щелкните страницу свойств Командная строка.

  4. Введите параметр компилятора в поле Дополнительные параметры.

Установка параметра компилятора программным способом

См. также

Ссылки

Параметры компилятора

Настройка параметров компилятора