Sobrecarregando o operador global novo/exclua em C ++
-
11-07-2019 - |
Pergunta
Estou tentando sobrecarregar o operador global novo e excluir um aplicativo sensível ao desempenho. Eu li as preocupações descritas em http://www.informit.com/articles/article.aspx?p=30642&seqnum=3 e as recomendações para usar o alocador da Intel TBB http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm
Como estou sobrecarregando novos e exclui pela primeira vez, tenho algumas perguntas.
Devo incluir meu novo alocador de cabeçalho.h (ou pre.h) contendo a nova função sobrecarregada em todos os arquivos que contêm chamadas "novas"? Isso é tedioso.
Ou devo usar "gcc -include alocator.h ...", que inclui alocador.h (antes) em cada unidade de tradução? Eu quero manter a plataforma de código independente o máximo possível. Todos os compiladores suportam algo análogo a "GCC -include"?
Solução
Se você deseja sobrecarregar o global operator new
e operator delete
, você só precisa implementá -lo. Você não precisa defini -lo explicitamente em todos os lugares, pois já é definido como parte do idioma.
EDIT: Se você deseja definir um novo operador que leva parâmetros diferentes, precisará #include em todos os lugares. No entanto, você faz isso depende de você; É principalmente uma questão de estilo.
E não se esqueça de implementar todas as variantes do operador global novo e excluir: new
, new[]
, delete
, delete[]
, e as std::nothrow
variantes.
Outras dicas
Se você estiver usando o Visual Studio e usando cabeçalhos pré -compilados, poderá lançar a inclusão lá. Eu acho que o GCC também tem algum tipo de cabeçalhos pré -compilantes, o que melhoraria seus tempos de compilação também.