• # C++ avec Qt gère la mémoire pour nous

    Posté par . En réponse au journal Encore une histoire de récupérateur de mémoire. Évalué à 6.

    Bonjour,

    Je tiens a préciser que Qt fourni un truc de vraiment très bien : il gère la mémoire pour nous. C'est simple : on crée un QObject, et on peut lui ajouter des enfants (contrôles d'une fenêtre, éléments d'une page web, etc). Quand on supprimera le QObject parent, tous les enfants seront supprimés, récursivement.

    Plus besoin de delete ! Et en plus, c'est "instantané" (donc on attend pas qu'un GC se dise «ah tiens, il faut de la mémoire»), et c'est très rapide (pas besoin de parcourir la mémoire, ou de construire un arbre, il est déjà contruit.


    QObject *parent = new QObject();
    QObject *enfant1 = new QObject(parent);
    QObject *enfant2 = new QObject(parent);
    QObject *petitEnfant = new QObject(enfant2);

    //Traitement (les QObject peuvent être des widgets, des chaînes de caractère, etc)

    //On libère le tout
    delete parent;


    Généralement, on n'a même pas besoin du "delete parent;", car un code ressemble souvent à ceci :


    Fenetre fenetre;
    fenetre.show();

    //Fin de procédure, fenêtre libéré (puisque sur la pile), et enfants libérés aussi

    Fenetre::Fenetre() : QWidget()
    {
    //Créer plein d'enfants
    }


    C'est-y pas beau ? C'est un des multiples services rendus par Qt. Je ne sais pas si Glib sait faire la même chose avec GObject, mais j'en doute un peu. (vous voyez, même moi je sais retenir un troll GNOME/KDE, clairement à l'avantage de KDE en plus)