Opérateurs new et delete globaux

Nous avons vu comment redéfinir les opérateurs d’allocation et de désallocation pour une classe particulière. Il est possible de redéfinir globalement ces opérateurs, de sorte qu’ils 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 lorsqu’ils sont les derniers insérés.

Précédent Précédent Sommaire Sommaire Suivant Suivant