/Zc:sizedDealloc (Habilitar funções de desalocação de tamanho global)
A opção do compilador /Zc:sizedDealloc informa ao compilador para chamar preferencialmente funções globais operator delete
ou operator delete[]
que têm um segundo parâmetro do tipo size_t
quando o tamanho do objeto está disponível. Essas funções podem usar o parâmetro size_t
para otimizar o desempenho do desalocador.
Sintaxe
/Zc:sizedDealloc[-]
Comentários
No padrão C++11, você pode definir funções de membro estático operator delete
e operator delete[]
que recebem um segundo parâmetro size_t
. Normalmente, elas são usadas em combinação com funções operator new para implementar alocadores e desalocadores mais eficientes para o objeto. No entanto, o C++11 não definiu um conjunto equivalente de funções de desalocação no escopo global. No C++11, as funções de desalocação global que têm um segundo parâmetro do tipo size_t
são consideradas funções de exclusão de posicionamento. Elas devem ser chamadas explicitamente passando um argumento de tamanho.
O padrão C++14 altera o comportamento do compilador. Quando você define operator delete
e operator delete[]
global que usa um segundo parâmetro do tipo size_t
, o compilador prefere chamar essas funções quando as versões de escopo do membro não são invocadas e o tamanho do objeto está disponível. O compilador passa o argumento de tamanho implicitamente. As versões de argumento único são chamadas quando o compilador não consegue determinar o tamanho do objeto que está sendo desalocado. Caso contrário, as regras usuais para escolha da versão da função de desalocação a ser invocada ainda se aplicarão. As chamadas às funções globais podem ser explicitamente especificadas ao preceder o operador de resolução de escopo (::
) à chamada de função de desalocação.
Por padrão, o Visual C++, a partir do Visual Studio 2015, implementa esse comportamento do padrão C++14. Você pode especificar isso explicitamente definindo a opção do compilador /Zc:sizedDealloc. Isso representa uma possível alteração interruptiva. Use a opção /Zc:sizedDealloc- para preservar o comportamento antigo, por exemplo, quando o código definir operadores de exclusão de posicionamento que usam um segundo parâmetro do tipo size_t
. As implementações padrão da biblioteca do Visual Studio das funções de desalocação globais que têm o segundo parâmetro do tipo size_t
, invocam as versões de parâmetro único. Se o código fornecer apenas operador de exclusão global de parâmetro único e operador delete[], as implementações de biblioteca padrão das funções de desalocação de tamanho global invocarão suas funções globais.
A opção do compilador /Zc:sizedDealloc está ativada por padrão. A opção /permissive- não afeta a /Zc:sizedDealloc.
Para obter mais informações sobre problemas de conformidade no Visual C++, confira Comportamento fora do padrão.
Para definir esta opção do compilador no ambiente de desenvolvimento do Visual Studio
Abra a caixa de diálogo Páginas de Propriedades do projeto. Para obter detalhes, confira Definir as propriedades de build e do compilador do C++ no Visual Studio.
No menu suspenso Configurações, escolha Todas as Configurações.
Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.
Modifique a propriedade Opções Adicionais para incluir /Zc:sizedDealloc ou /Zc:sizedDealloc- e escolha OK.
Confira também
Opções do compilador MSVC
Sintaxe da linha de comando do compilador MSVC
/Zc (conformidade)