new
et delete
globauxNous avons vu comment redéfinir les opérateurs dallocation et de désallocation pour une classe particulière. Il est possible de redéfinir globalement ces opérateurs, de sorte quils agissent sur toutes les classes, même les prédéfinies. Voici un exemple (assez stupide) :
const MAXINT = 32767;unsigned* bloc;void* operator new(unsigned taille){ if (!bloc) { bloc = new unsigned[MAXINT]; if (!bloc) return 0; bloc[MAXINT] = 0; } unsigned occupes = bloc[MAXINT]; if (occupes + taille >= MAXINT) return 0; bloc[occupes++] = taille; bloc[MAXINT] += (3+taille)/2; return bloc + occupes;}void operator delete(void *p){ if (!p) return; unsigned position = (unsigned*)p -bloc -1; unsigned taille = (3 + bloc[position])/2; if (bloc[MAXINT]-position == taille) bloc[MAXINT] = position;}
Dans notre exemple, ces opérateurs utilisent un bloc fixe en mémoire, et placent les objets dans ce bloc, les uns derrière les autres, précédés par leur taille. Les objets ne sont détruits que lorsquils sont les derniers insérés.
Précédent | Sommaire | Suivant |