Dois-je supprimer des objets du tas dans l'exemple ci-dessous? Et si oui, comment? Merci pour toute aide. P> P>
3 Réponses :
Il suffit d'allouer de Tutoriel Widgets - Widgets pour enfants a >: p>
Le bouton est maintenant un enfant de la fenêtre et sera supprimé lorsque la fenêtre est détruite. Notez que la cachette ou la fermeture de la fenêtre ne le détruise pas automatiquement. Il sera détruit lorsque l'exemple sort. P>
blockQuote>
Voir aussi Arbres d'objet et propriété d'objet . P> séparateur code> sur la pile. Ensuite, arborescence code>, Liste code> et Table code> devient des enfants de Splitter code> qui prend la propriété. Lorsque Splitter code> est supprimé, tous les enfants sont supprimés. P>
Mais dois-je supprimer un objet séparateur? Ou dois-je le placer sur la pile?
Ah oui, bien je mettrais le diviseur code> sur la pile
Oui, supprimez-le ou placez-le sur la pile.
Gregory Pakosz a souligné la solution appropriée, mais je voulais réitérer avec un exemple de code et vous suggérer d'examiner la portée de l'objet C ++. Greg est précis mais n'a précisé que la mise en place de la splitter sur la pile signifie qu'une fois qu'elle dépasse de la portée (l'application quitte), il sera supprimé.
plus précisément, vous devez définir un parent de QOBJET. Lorsqu'un objet parent s'applique à un autre objet, il supprime ses enfants lors de l'appel de Supprimer sur l'objet parent. Dans l'affaire QSplitters, Addwidget ajoute à la disposition de Qwidget et la mise en page prend la propriété de ces objets. P>
#include <QApplication>
#include <QTreeView>
#include <QListView>
#include <QTableView>
#include <QSplitter>
int main(int argc, char* argv[])
{
QApplication app(argc,argv);
QTreeView* tree = new QTreeView;
QListView* list = new QListView;
QTableView* table = new QTableView;
QSplitter splitter;
splitter.addWidget(tree);
splitter.addWidget(list);
splitter.addWidget(table);
splitter.show();
return app.exec();
}
Au lieu de gérer la mémoire manuellement, vous pouvez laisser le compilateur le faire pour vous. À ce moment-là, vous pouvez demander: pourquoi utiliser le tas du tout? Vous devriez garder les choses en valeur autant que possible et laisser le compilateur faire le travail acharné.
Les objets seront détruits dans l'ordre inverse de la déclaration. Ainsi, le séparateur - le parent implicite - doit être déclaré en premier, de sorte qu'il ne tente pas de supprimer de manière incorrecte ses enfants. En C ++, l'ordre des déclarations a une signification! P>