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 :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 node<int> n(2); node<int>* h=&n; mylist::list<int> l(h);
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 !
Partager