Partilhar via


/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

  1. 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.

  2. No menu suspenso Configurações, escolha Todas as Configurações.

  3. Selecione a página de propriedades Propriedades de Configuração>C/C++>Linha de Comando.

  4. 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)