C++destructeur
Fermé
k-23
Messages postés
252
Date d'inscription
mardi 4 mars 2008
Statut
Membre
Dernière intervention
25 novembre 2014
-
26 mars 2010 à 00:57
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 26 mars 2010 à 21:02
Pacorabanix Messages postés 3245 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 26 mars 2010 à 21:02
A voir également:
- Créer un virus destructeur
- Créer un compte gmail - Guide
- Créer un compte google - Guide
- Créer un compte instagram - Guide
- Créer un compte facebook - Guide
- Creer adresse mail - Guide
1 réponse
Pacorabanix
Messages postés
3245
Date d'inscription
jeudi 23 août 2007
Statut
Membre
Dernière intervention
19 mai 2013
658
Modifié par Pacorabanix le 26/03/2010 à 01:07
Modifié par Pacorabanix le 26/03/2010 à 01:07
lorsque tu fais appel à delete pointeurVersObjetCréeAvecNew, le destructeur de l'objet pointé est automatiquement appelé avant que le programme ne libère la mémoire de l'objet.
donc ce que tu fais à l'air correct. (il faudrait voir ton code)
Il y a quelques règles spéciales concernant l'héritage à vérifier si tu es dans ce cas.
Pour tester ton constructeur de copie et ton destructeur, tu peux simplement envoyer un message dans la console. ex. : std::cout << "Constructeur appelé" << std::endl
donc ce que tu fais à l'air correct. (il faudrait voir ton code)
Il y a quelques règles spéciales concernant l'héritage à vérifier si tu es dans ce cas.
Pour tester ton constructeur de copie et ton destructeur, tu peux simplement envoyer un message dans la console. ex. : std::cout << "Constructeur appelé" << std::endl
26 mars 2010 à 01:31
26 mars 2010 à 01:34
26 mars 2010 à 01:38
26 mars 2010 à 01:49
NoeudGeneral<T> :: ~NoeudGeneral () {
typename NoeudGeneral<T> ::IterateurDeDescendants temp;
temp.iterateur = (*sousArbres).begin();
NoeudGeneral<T> * t = *temp.iterateur;
delete t;
}
mon constructeur noeud posedde une valeur de type t et une liste des pointeur vers des neouds
mon constructeur c ca
template <class T>
NoeudGeneral<T> :: NoeudGeneral ( const T & elem ) {
this->info = elem;
sousArbres= new list< NoeudGeneral<T> * >;
}
dans mon main jai cree
NoeudGeneral<int> t ( 5 );
t.~NoeudGeneral(); <----- cest ice le probleme
mon destructeur ne marche pas tout le reste marche suaf le destructeur
Modifié par Pacorabanix le 26/03/2010 à 02:15
oui, si tu as mis "using namespace std;" au début de ton programme.
si je fais un pop_back() ce serait la meme chose qu un delete.
Non, popback() ne fait que supprimer le dernier élément de la liste, mais n'appelle pas delete. En fait on peut mettre n'importe quoi dans une liste, pas forcément des objets crées avec new. Et d'autres fois on n'a pas forcément envie de supprimer les objets pointés, on veut juste les enlever de la liste.
t.~NoeudGeneral(); <----- cest ice le probleme
oui, tu ne peux pas appeler le destructeur dans ton code.
Il est appelé automatiquement à la destruction de l'objet par delete pointeurVersLÔbjet
(ou lors de la fin du programme si ton objet n'a pas été crée avec new, mais comme variable toute simple)
c'est donc l'instruction delete pointeur qui appelle le destructeur. Ce n'est pas le destructeur qui doit appeler delete pour lui même.
Ton objet n'est pas crée avec new. Son destructeur sera appelé à la fin du programme, c'est tout.
NoeudGeneral<int> t ( 5 );
cette ligne indique que ton objet est une variable locale à main().
Elle sera suprimée (et son destructeur appelé) lorsque main() sera finie.
delete, c'est pour aller avec new.