Les commandes delete et new sont � pr�f�rer en C++ aux fonctions malloc et free du C. Pr�voyez d'utiliser new et zap (commande delete) � la place de malloc et free autant que possible.
Pour rendre la commande delete encore plus propre, faisons une commande zap(). D�finissons zap() ainsi :
/* ** Utilise do while pour le rendre robuste et sans erreur en cas d'utilisation ** avec les macros. ** Par exemple, si "do-while" n'est PAS utilis� alors les r�sultats seront ** diff�rents comme dans ** if (bbint == 4) ** aa = 0 ** else ** zap(aptr); // Probleme ! aptr sera toujours mis a NULL */ #define zap(x) do { delete(x); x = NULL; } while (0)
La commande zap() lib�rera la m�moire point�e et initialisera le pointeur � NULL. Cela assurera qu'en cas d'appels multiples � zap() pour un m�me pointeur, le programme ne plantera pas. Par exemple :
zap(pFirstname); zap(pFirstname); // pas de plantages, car pFirstname est NULL maintenant zap(pFirstname); // pas de plantages, car pFirstname est NULL maintenant zap(pLastname); zap(pJobDescription);
Il n'y a rien de magique l�-dedans, cela �vite juste la r�p�tition de code, �conomise le temps de frappe et rend les programmes plus lisibles. Les programmeurs C++ oublient souvent de r�initialiser � NULL les pointeurs lib�r�s et cela cause des probl�mes ennuyeux comme des 'core dumps' et des plantages. zap() g�re cela automatiquement. Ne pas faire de transtypage dans la commande zap() : si quelque chose pose probl�me dans la commande zap() pr�c�dente, il y a probablement une autre erreur ailleurs.
De m�me my_malloc(), my_realloc() et my_free() devraient �tre utilis�s � la place de malloc(), realloc() et free(), car elles sont plus propres et font des v�rifications suppl�mentaires. Par exemple, parcourez le fichier "String.h" qui utilise les fonctions my_malloc() et my_free().
ATTENTION : Ne pas utiliser free() pour lib�rer la m�moire allou�e
avec new
, ni utiliser delete
pour lib�rer la m�moire allou�e
avec malloc(). Si vous faites �a, les r�sultats seront impr�visibles !
Hosting by: Hurra Communications GmbH
Generated: 2007-01-26 18:01:30