Problème avec les destructeurs

Problème avec les destructeurs

by Marius Noé Chartier -
Number of replies: 2

Bonjour,

Mon programme fonctionne correctement et utilise des pointeurs normaux. Lorsque j'ai créé des destructeurs pour delete ces derniers, le programme a compilé et s'est exécuté jusqu'au bout mais a affiché le message :

"Le programme s'est terminé subitement."

J'ai ensuite enlevé les destructeurs et changé mes pointeurs par des unique_ptr mais j'ai obtenu la même erreur. 

Avez-vous une idée de ce qui pose problème ? (car il me semble que je ne suis pas censé laisser mes classes avec des pointeurs normaux sans destructeurs)

In reply to Marius Noé Chartier

Re: Problème avec les destructeurs

by Deleted user -

(car il me semble que je ne suis pas censé laisser mes classes avec des pointeurs normaux sans destructeurs)

Attention, là ça dépend. Si tu initialises dynamiquement la mémoire au bout de ton pointeur, un delete sera nécessaire. Sinon, ce n'est pas le cas, et la mémoire au bout du pointeur sera libérée automatiquement (quand le programme sort de la région du code où elle est déclarée -> voir les problèmes de portée).

Une segfault (car je pense que c'est ce qui vous arrive) peut survenir dans plusieurs cas,
- vous essayez de libérer un nullptr, ou
- de libérer un objet qui n'a pas été alloué dynamiquement.

Je précise que le 1er scénario peut aussi arriver si on a deux pointeurs initialisés vers une même variable et qu'on essaye tour à tour de les delete (seul le premier appel va fonctionner).

Pour toi, le 1er cas pourrait arriver si tu initialises deux unique_ptr sur une même adresse par exemple.


J'espère que ça donne des pistes.