Surcharge de l'opérateur global new / delete en C ++
-
11-07-2019 - |
Question
J'essaie de surcharger l'opérateur global new et de le supprimer pour une application sensible aux performances. J'ai lu les problèmes décrits à l'adresse http://www.informit.com. /articles/article.aspx?p=30642&seqNum=3 et recommandations concernant l'utilisation de l'allocateur Intel TBB http://www.intel.com/technology/itj/2007/v11i4/5-foundations/5-memory.htm
Étant donné que je surcharge et que je supprime pour la première fois, j'ai quelques questions.
Devrais-je inclure mon nouvel en-tête Allocator.h (ou Pre.h) contenant la nouvelle fonction surchargée dans tous les fichiers contenant le mot-clé "nouveau"? appels? C'est fastidieux.
Ou devrais-je utiliser "gcc -include Allocator.h ..."? qui inclut Allocator.h (avant) dans chaque unité de traduction? Je veux garder la plate-forme de code indépendante autant que possible. Est-ce que tous les compilateurs supportent quelque chose d'analogue de "gcc -include"?
La solution
Si vous souhaitez surcharger l'opérateur global, nouvel
et l'opérateur delete
, il vous suffit de l'implémenter. Vous n'avez pas besoin de le définir explicitement partout car il est déjà défini dans le langage.
Éditer: Si vous voulez définir un opérateur nouveau qui prend différents paramètres, vous devez alors # l'inclure partout. Quoi que vous fassiez, cela dépend de vous; c'est surtout une question de style.
Et n'oubliez pas de mettre en œuvre toutes les variantes de l'opérateur global new et delete: new
, new []
, delete
, < code> delete [] et les variantes std :: nothrow
.
Autres conseils
Si vous utilisez Visual Studio et utilisez des en-têtes précompilés, vous pouvez y inclure l'inclusion. Je pense que gcc a également une forme d’en-tête de précompilation, ce qui améliorerait également votre temps de compilation.