/Zc:sizedDealloc (Habilitar funciones de desasignación de tamaño global)
La opción del compilador /Zc:sizeDealloc indica al compilador que llame preferentemente a funciones globales operator delete
o operator delete[]
que tengan un segundo parámetro de tipo size_t
cuando el tamaño del objeto esté disponible. Estas funciones pueden usar el parámetro size_t
para optimizar el rendimiento del desasignador.
Sintaxis
/Zc:sizedDealloc[-]
Comentarios
En el estándar de C++11, puede definir funciones operator delete
miembro estáticas y operator delete[]
que toman un segundo parámetro size_t
. Normalmente se usan en combinación con las funciones operator new para implementar asignadores y desasignadores más eficaces para el objeto. Sin embargo, C++11 no definió un conjunto equivalente de funciones de desasignación en el ámbito global. En C++11, las funciones de desasignación global que tienen un segundo parámetro de tipo size_t
se consideran funciones de eliminación de ubicación. Se debe llamar explícitamente pasando un argumento size.
El estándar de C++14 cambia el comportamiento del compilador. Al definir operator delete
y operator delete[]
global que toman un segundo parámetro de tipo size_t
, el compilador prefiere llamar a estas funciones cuando no se invocan las versiones de ámbito de miembro y el tamaño del objeto está disponible. El compilador pasa el argumento size implícitamente. Se llama a las versiones de argumento único cuando el compilador no puede determinar el tamaño del objeto que se desasigna. De lo contrario, se siguen aplicando las reglas habituales para elegir la versión de la función de desasignación que se va a invocar. Las llamadas a las funciones globales se pueden especificar explícitamente anteponiendo el operador de resolución de ámbito (::
) a la llamada de función de desasignación.
De forma predeterminada, Visual C++ a partir de Visual Studio 2015 implementa este comportamiento estándar de C++14. Puede especificarlo explícitamente estableciendo la opción del compilador /Zc:sizedDealloc. Esto representa potencialmente un cambio importante. Use la opción /Zc:sizedDealloc- para conservar el comportamiento anterior, por ejemplo, cuando el código define operadores de eliminación de ubicación que usan un segundo parámetro de tipo size_t
. Las implementaciones predeterminadas de la biblioteca de Visual Studio de las funciones globales de desasignación que tienen el segundo parámetro de tipo size_t
invocan las versiones de parámetro único. Si el código solo proporciona el operador global de un solo parámetro delete y el operador delete[], las implementaciones de biblioteca predeterminadas de las funciones de desasignación de tamaño global invocan las funciones globales.
La opción del compilador /Zc:sizedDealloc está activada de forma predeterminada. La opción /permissive- no afecta a /Zc:sizedDealloc.
Para obtener más información sobre los problemas de conformidad de Visual C++, vea Nonstandard Behavior.
Para establecer esta opción del compilador en el entorno de desarrollo de Visual Studio
Abra el cuadro de diálogo Páginas de propiedades del proyecto. Para más información, vea Establecimiento del compilador de C++ y de propiedades de compilación en Visual Studio.
En el menú desplegable Configuraciones, elija Todas las configuraciones.
Seleccione la página de propiedades Propiedades de configuración>C/C++>Línea de comandos.
Modifique la propiedad Opciones adicionales para incluir /Zc:sizedDealloc o /Zc:sizedDealloc- y luego elija Aceptar.
Consulte también
Opciones del compilador de MSVC
Sintaxis de la línea de comandos del compilador MSVC
/Zc (Ajuste)