/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
Откройте диалоговое окно Страницы свойств проекта. Подробнее см. в статье Настройка компилятора C++ и свойства сборки в Visual Studio.
В раскрывающемся меню "Конфигурации" выберите "Все конфигурации".
Перейдите на страницу свойств Свойства конфигурации>C/C++>Командная строка.
Измените свойство "Дополнительные параметры", чтобы включить /Zc:sizedDealloc или /Zc:sizedDealloc- и нажмите кнопку "ОК".
См. также
Параметры компилятора MSVC
Синтаксис командной строки компилятора MSVC
/Zc (соответствие)