C++destructeur
k-23
Messages postés
252
Date d'inscription
Statut
Membre
Dernière intervention
-
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je voudrais savoir comment utiliser le destructeur je comprend comment il marhce mais mais je sais pas comment le faire lorsque jai le cas suivant:
jai une liste de pointeurs chaque pointeur pointe sur un objet
je voudrais savoir comment je pourrais employer le destructeur dans ce cas
jai faite un iterateur qui point sur le premier element de ma liste.ensuite je lefface en faisant delete iterateur
je voudrais savoir aussi comment tester mon constructeur de copie
delete
je voudrais savoir comment utiliser le destructeur je comprend comment il marhce mais mais je sais pas comment le faire lorsque jai le cas suivant:
jai une liste de pointeurs chaque pointeur pointe sur un objet
je voudrais savoir comment je pourrais employer le destructeur dans ce cas
jai faite un iterateur qui point sur le premier element de ma liste.ensuite je lefface en faisant delete iterateur
je voudrais savoir aussi comment tester mon constructeur de copie
delete
A voir également:
- Créer un virus destructeur
- Créer un compte google - Guide
- Comment créer un groupe whatsapp - Guide
- Créer un lien pour partager des photos - Guide
- Créer un compte gmail - Guide
- Créer un compte instagram sur google - Guide
1 réponse
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
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
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.