bonjour,
je voudrais savoir si c'est possible d'appeler le destructeur dans une fonction ou pas ?
Merci
Version imprimable
bonjour,
je voudrais savoir si c'est possible d'appeler le destructeur dans une fonction ou pas ?
Merci
Salut,
Le constructeur et le destructeurs sont avant tout des fonctions membres de la classe...
Il est donc tout à fait possible de les appeler depuis une fonction, à l'instar de n'importe quelle autre fonction membre ;)
Il existe même une pratique (recherche placement new ou memory pool sur le forum et/ou dans la FAQ) qui finit par faire appel au constructeur et au destructeur de manière controlée.
Cependant, il faut bien te dire que, ainsi que l'objet n'est pas initialisé tant que le constructeur n'a pas été appelé, bien que la mémoire nécessaire pour représenter la structure de donnée ait été fournie et alignée, un objet n'est plus utilisable une fois que son destructeur a été appelé... et qu'un nouvel appel au destructeur (entre autre lors de la sortie de la portée de la variable ou lors d'un appel à delete) risque de faire pas mal de dégâts en cas de manque de contrôles ;)
C'est la raison pour laquelle on préfère laisser l'utilisation du destructeurs aux mécanismes existants (delete, delete[] et destruction d'un instance en sortie de portée) que de faire un appel explicite au destructeur ;)
Une alternative (en dehors de toute décision d'avoir recours au placement new) souvent utilisée pour implémenter ce que l'on appelle un singleton est de:
- rendre le constructeur et le destructeur privés
- fournir un membre (privé) statique qui est un pointeur sur l'objet
- fournir une méthode (publique) statique permettant d'obtenir l'instance en appelant la créant par new "a la demande" si elle n'existe pas encore
- fournir (éventuellement) une méthode (publique) statique permettant de libérer l'instance par delete "a la demenade" si elle existe
le destructeur s'appelle comme une fonction membre nommée ~Type()
Merci pour toutes vos réponses