Maison > Article > développement back-end > Quel est le comportement du « nouvel » opérateur dans différents compilateurs C, en particulier en ce qui concerne l’échec de l’allocation de mémoire ?
New Ever Return NULL ?
En C , l'opérateur new est responsable de l'allocation de mémoire pour les nouveaux objets. Selon la norme C, si new ne parvient pas à allouer de la mémoire, il est censé lever une exception std::bad_alloc. Cependant, il y a eu des rumeurs selon lesquelles certains compilateurs, tels que Visual C 6 (VC6), s'écartent de ce comportement.
Non-conformité de VC6
Les rumeurs sont vraies . VC6, par défaut, n'adhère pas à la norme C à cet égard. Lorsque new ne parvenait pas à allouer de la mémoire, il renvoyait 0 (ou NULL) au lieu de lever une exception.
Solution de contournement de Microsoft
Microsoft a reconnu ce problème et a proposé une solution de contournement : en utilisant un nouveau gestionnaire personnalisé. Les développeurs pourraient spécifier leur propre implémentation de l'opérateur new qui lancerait une exception std::bad_alloc au lieu de renvoyer 0.
Compilateurs MSVC ultérieurs
Dans les versions ultérieures de MSVC ( à partir de la version 7.0), le comportement de new est devenu plus complexe. Il y avait un ensemble de règles qui déterminaient s'il lèverait une exception ou renverrait 0.
VS2005 et au-delà
Avec VS2005 (MSVC 8.0), Microsoft a finalement nettoyé ce comportement. Par défaut, new lève désormais une exception std::bad_alloc à moins qu'il ne soit explicitement lié à nothrownew.obj.
Approche alternative : std::nothrow
Les développeurs peuvent également spécifier que ils veulent que new renvoie 0 au lieu de lever une exception en utilisant le paramètre std::nothrow. Cela permet un comportement cohérent entre les compilateurs, même avec le code existant écrit pour VC6.
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!