Citation:
Envoyé par
LittleWhite
Ce n'est pas vraiment que je n'ai pas compris ( maintenant c'est bon, je veux dire ). C'est juste que je préfère faire une gestion totale de ma mémoire, au lieu d'avoir une gestion non controllée, que je risque de faire des erreurs.
En c++ on va detester le delete et déléguer cela à des smart pointeur ou à Qt pour le cas des QObject.
Citation:
Dans le deuxième exemple, je penserai plus à erreur de mémoire ( du moins, il y a trop de risque pour continuer à utiliser ce genre de code ).
c'est bien une erreur car w est détruit avant w2. Quand w est détruit, il détruit w2. Pui sla classe détruit encore une fois w2
et comme tu la dit
Citation:
" On détruit les objets dans l'ordre inverse de la construction "
Citation:
Que cela soit appelé Garbage Collector, je suis contre.
Car le genre que je fais une allocation à la main, qui n'est pas attaché à Qt ... et bah, j'ai une fuite si je ne détruit par à la main. Donc du coup, j'oserai dire que ce n'est pas un vrai garbage collector.
Ben si s'en est un mais que pour le QOBject. IL ne pourra pas gérer le reste. Après c'est smart_ptr ;)
Citation:
Sinon, le "garbage collector" est il aussi actif lorsque l'on ne donne pas d'objet parent?
( new QButton(0) // par exemple )
non, la c'est a toi de le détruire. Tu devrais relit les deux liens de la faq.
Citation:
Dernière chose, qu'un QObject détruise ses enfants, cela ne me choque pas trop, faut juste que j'en prenne plus conscience dans mon code.
( Cela serait comme un std::vector qui détruirait les pointeurs qu'il a dans la liste )
exactement.
Un truc qu'il faut bien comprendre. Si on détruit un QObject et qu'il est parenté, il se sépare de son parent et ne pose pas de problème. Mais il va détruire ses enfants.
Au lieu de faire un delete, il est souvent préférable d'utiliser deleteLater() sur un QOBject. Ça met un évènement dans l'eventloop qui va le détruire . Car si tu fait un delete pendant un signal, ca peut foutre la merde.