Vous le savez, gérer la mémoire avec c++ demande une certaine vigilance.
En effet, il faut penser à faire un “delete” quand on fait un “new”.
Par contre avec Qt, une grosse partie a déjà été faite pour vous. Si vous donnez un parent à un objet, quand le parent sera détruit, l’enfant le sera aussi !
Donc, si vous donnez comme parent un object qui est géré par Qt à tout ce que vous créez, plus besoin d’y penser. Bien entendu il y a des exceptions, mais dans ces cas là, on y pense, à notre “delete”, et ça peut causer quelques maux de tête …
Justement parlant d’exceptions qui donnent mal à la tête, Qt y a pensé aussi.
Si vous voulez partager un pointeur dans différentes classes, mais que vous ne savez pas qui doit le détruire, vous ne savez pas si l’objet est créé, s’il a été détruit par Qt par inadvertance …
Qu’à cela ne tienne ! Qt a créé une classe QPointer, qui garde un pointeur, et il peut être utilisé comme un pointeur … à la seule exception près que si l’objet pointé est détruit, QPointer retourne NULL, ce qui peut être très pratique.
Mais ce n’est pas tout, Qt a aussi ajouté une fonctionnalité fort utile aux objets: deleteLater().
Parce que parfois, on veut détruire un objet qui a appelé la fonction qui détruit cet objet … ou en tout cas, un truc qui peut être complexe. Eh bien deleteLater() va détruire l’objet seulement quand tous les évènements qu’il est présentement en train de faire seront terminés.
C’est déjà pas mal pour la gestion de la destruction des objets … mais il existe aussi d’autres fonctions fort utiles, comme qDeleteAll(), qui détruit tous les objets contenus dans une liste.