Liste chaînée - Optimisation de la consommation mémoire
Bonjour à tous,
J'ai implémenté une structure liste chaînée sous Xcode, et je voudrais optimiser la consommation mémoire de mon code. Voici deux architectures entre lesquelles j'hésite :
- le constructeur par défaut de la classe noeud (resp de la classe liste) initialise le champ de la classe noeud (resp liste) de type noeud* par un NULL
- le constructeur par défaut de la classe noeud (resp de la classe liste) alloue une zone mémoire au champ de la classe noeud (resp liste) de type noeud* avec un new
Pour l'instant je me suis contenté de la première architecture (une initialisation à NULL sans appel à new), et dans le main, je déclare une variable n de type noeud, puis je déclare et initialise un pointeur h de type noeud* sur n en utilisant &. Ce pointeur étant destiné à être la tête d'une liste, je déclare ensuite une liste et l'initialise simultanément avec ce pointeur. Cela donne :
Code:
1 2 3
| node<int> n(2);
node<int>* h=&n;
mylist::list<int> l(h); |
Vu que je n'ai utilisé aucun new dans mes constructeurs ni dans le main, mes destructeurs ne contiennent pas de commande delete . C'est ce qu'on m'a appris en tous cas. Merci de m'éclairer si je me trompe ou de compléter ma connaissance là dessus.
Je remarque aussi que lorsque j'ajoute delete head dans le destructeur de liste, tout se passe comme si je l'avais décommenté : même résultat dans la console et pas d'erreur de mémoire lancée par Xcode.
Ma question est : quelle architecture entre les deux que j'ai évoquées ci dessus devrais-je choisir afin d'avoir la meilleur gestion mémoire (pas de perte/fuite de mémoire et consommation minimale de mémoire) ? Y a-t-il une meilleure architecture, dans le sens de la gestion mémoire, que celles que j'ai citées ?
Joyeuses fêtes !