bonjour a tous je fais appelle a vous car j'ai besoin de votre aide concernant les destructeur. Sa peut vous paraitre ridicule comme probleme mais moi je n'y comprend rien, et ceux malgré avoir lu la faq C++ sur les destructeurs.
Voici mon probleme : j'ai creer une classe et je l'appelle dans mon programme comme ci dessous :
et voici le destructeur que j'ai creer est qui est appelé
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 void laPageAccueil::afficherPageEnregistrerLivre() { leLivre *unLivre = new leLivre(this); unLivre->exec(); delete unLivre; // on appelle donc unLivre->~leLivre() }
et je ne comprend pas pourquoi cela plante.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 leLivre::~leLivre() { delete enregistrerLivreLabel; delete livreGroupBox; delete horizontalLayoutWidget; delete horizontalLayout; delete isbnLabel; delete isbnLineEdit; delete horizontalLayoutWidget_2; delete horizontalLayout_2; delete titreLabel; delete titreLivreLineEdit; delete auteurGroupBox; delete horizontalLayoutWidget_4; delete horizontalLayout_4; delete auteurLabel; delete auteurLineEdit; delete progressBar2; delete horizontalLayoutWidget_3; delete horizontalLayout_3; delete validerButton2; delete fermerButton2; delete consigneLabel2; }
Dans la leçon C++ il est dit qu'a chaque "new" il est indispensable de les supprimer par la suite avec un delete afin que les objets creer ne trainent pas en mémoire.
En effet si on prend la premiere ligne du destructeur : delete enregistrerLivreLabel;
je fait un delete, mais si je le fais c'est parce que dans le programme il y a eu un enregistrerLivreLabel = new label(); il est donc normal que je le supprime par la suite en faisant un delete.
Mais le programme plante et j'ai vraiment du mal a comprendre pourquoi ,par contre quand j'enleve tout les deletes du destructeurs, le programme marche mais dans ce cas tous les objets creer resteront en mémoire et celle ci ne sera pas liberer.
J'ai certainement faux dans ma logique, puisque je n'arrive pas a resoudre mon probleme, j'aimerai donc que vous m'expliquiez mon probleme.
Je vous remercie d'avance pour les explications que vous m'apporterez
Partager