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


/Zc:sizedDealloc (включение глобальных размерных функций удаления)

Параметр компилятора /Zc:sizeDealloc сообщает компилятору предпочтительно вызывать глобальный operator delete или operator delete[] функции, имеющие второй параметр типа size_t , если размер объекта доступен. Эти функции могут использовать size_t параметр для оптимизации производительности сделки.

Синтаксис

/Zc:sizedDealloc[-]

Замечания

В стандарте C++11 можно определить статические функции-члены operator delete и operator delete[] принять второй size_t параметр. Обычно они используются в сочетании с новыми функциями оператора для реализации более эффективных распределителей и сделок для объекта. Однако C++11 не определил эквивалентный набор функций размещения сделки в глобальной области. В C++11 функции глобального распределения сделки, имеющие второй параметр типа size_t , считаются функциями удаления размещения. Они должны быть явно вызваны путем передачи аргумента размера.

Стандарт C++14 изменяет поведение компилятора. Когда вы определяете глобальный operator delete и operator delete[] принимает второй параметр типа size_t, компилятор предпочитает вызывать эти функции, если версии области членов не вызываются, а размер объекта доступен. Компилятор передает аргумент размера неявно. Версии одного аргумента вызываются, когда компилятор не может определить размер освобожденного объекта. В противном случае обычные правила выбора версии функции deallocation для вызова по-прежнему применяются. Вызовы глобальных функций могут быть явно указаны путем предустановки оператора разрешения области (::) к вызову функции deallocation.

По умолчанию Visual C++ начиная с Visual Studio 2015 реализует это стандартное поведение C++14. Это можно явно указать, задав параметр компилятора /Zc:sizeDealloc . Это потенциально критическое изменение. Используйте параметр /Zc:sizeDealloc, чтобы сохранить старое поведение, например, когда код определяет операторы удаления размещения, использующие второй параметр типаsize_t. Реализация библиотеки Visual Studio по умолчанию функций глобального распределения сделки, имеющих второй параметр типа size_t , вызывает версии отдельных параметров. Если код предоставляет только один параметр глобального оператора delete and operator delete[], реализация библиотеки по умолчанию функций распределения глобальных размеров вызывает глобальные функции.

Параметр компилятора /Zc:sizeDealloc включен по умолчанию. Параметр /permissive- не влияет на /Zc:sizeDealloc.

Дополнительные сведения о вопросах соответствия в Visual C++ см. в статье Nonstandard Behavior.

Установка данного параметра компилятора в среде разработки Visual Studio

  1. Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.

  2. В раскрывающемся меню "Конфигурации" выберите "Все конфигурации".

  3. Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.

  4. Измените свойство "Дополнительные параметры", чтобы включить /Zc:sizedDealloc или /Zc:sizedDealloc- и нажмите кнопку "ОК".

См. также

Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/Zc (соответствие)