Maison > Article > développement back-end > Comment puis-je écraser les opérateurs globaux « nouveau » et « supprimer » sans modifier le code existant ?
Écrasement des opérateurs globaux de nouvelle et de suppression
Les subtilités de la surcharge des opérateurs globaux de nouvelle et de suppression peuvent être intimidantes, en particulier lorsqu'il s'agit d'un code complexe bibliothèques de base et tierces. Cependant, il existe une approche simple et efficace qui élimine le besoin d'inclusion généralisée de fichiers d'en-tête.
Comme l'a déclaré l'expert, il suffit de définir ces opérateurs dans une unité de traduction (TU) distincte et de la lier au projet. Cette TU peut être une implémentation simple, comme démontré ci-dessous :
<code class="cpp">// optional_ops.cpp void * operator new(std::size_t n) throw(std::bad_alloc) { //... // Your custom memory allocation implementation } void operator delete(void * p) throw() { //... // Your custom memory deallocation implementation }</code>
Pour éviter des erreurs potentielles, il est conseillé d'inclure les en-têtes nécessaires pour déclarer des noms tels que std, std::bad_alloc et std::size_t. . Cela garantit que vos surcharges peuvent s'intégrer de manière transparente à la base de code existante.
Dans les versions ultérieures de C (à partir de C 11), une approche alternative peut être utilisée :
<code class="cpp">void * operator new(decltype(sizeof(0)) n) noexcept(false) { //... }</code>
Cette méthode élimine le besoin d'en-têtes externes et fournit une implémentation plus propre et plus concise.
En adoptant cette approche, le gestionnaire de mémoire personnalisé peut être appliqué globalement sans nécessiter de modifications importantes du code ou la diffusion du fichier d'en-tête. Il s'agit d'une solution propre et efficace pour gérer les opérations de mémoire dans toute l'application, garantissant un comportement cohérent d'allocation et de désallocation de mémoire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!