Je sais que mes destructeurs sont appelés lors du déroulement normal de la pile et quand des exceptions sont lancées, mais pas quand exit() est appelé.Dans quelles circonstances les destructeurs C++ ne vont-ils pas être appelés?
Y a-t-il d'autres cas où mes destructeurs ne seront pas appelés? Qu'en est-il des signaux tels que SIGINT ou SIGSEGV? Je présume que pour SIGSEGV, ils ne sont pas appelés, mais pour SIGNINT ils sont, comment puis-je savoir quels signaux vont dérouler la pile?
Y at-il d'autres circonstances où ils ne seront pas appelés?
Comme indiqué ici, http://thedailywtf.com/Articles/My-Tales.aspx, vous devriez aussi être conscient de la destructor ne sera pas appelée lorsque la prise de courant est tirée;). –
SIGINT ne déroulera pas la pile à moins d'installer un gestionnaire de signal qui remplace le comportement par défaut. Par défaut, SIGINT entraîne la fin immédiate du programme. – karunski
Ne pas afficher cela comme une réponse, car il semble plus comme un oubli dans la question. Les destructeurs sont appelés automatiquement (dans des circonstances normales) à la fin de la durée de vie des objets avec une durée de stockage statique, automatique ou de thread. Pour un objet avec une durée de stockage ** dynamique **, le destructeur est appelé uniquement lorsque 'delete' est appelé sur un pointeur vers l'objet. Un destructeur ne sera donc pas appelé pour les objets dynamiques pour lesquels 'delete' n'est jamais appelé (que ce soit parce qu'une fuite de mémoire rend cela impossible, ou par inadvertance). –