Question

J'ai vu des classes C ++ avec un destructeur défini comme suit:

class someClass
{
    public:
        someClass();
        ~someClass() throw();
};

Est-ce une bonne idée?

Je suis bien conscient que les destructeurs ne devraient jamais lancer d'exceptions, mais est-ce que cela m'empêchera réellement de lancer des exceptions dans mes destructeurs? Je ne suis pas sûr à 100% de ce que cela garantit.

Référence: cette question récente

Était-ce utile?

La solution

Cela ne vous empêche pas de lancer des exceptions de votre destructeur. Le compilateur vous laissera quand même le faire. La différence est que si vous autorisez une exception à échapper à ce destructeur, votre programme appellera immédiatement inattendu . Cette fonction appelle le Invisible_handler auquel le désigne, qui est par défaut terminate . Donc, à moins que vous ne fassiez quelque chose pour gérer une exception inattendue, votre programme se termine, ce qui n’est pas une mauvaise idée en soi. Après tout, si l’exception est vraiment inattendue, alors votre programme ne pourra rien faire pour le gérer de toute façon.

Ce n'est pas quelque chose de spécial à propos des destructeurs; les mêmes règles s'appliquent aux spécifications d'exception pour toutes les méthodes.

Autres conseils

Ce n'est pas une idée terrible. Si vous lancez le disque alors qu’aucune exception n’est propagée, vous abandonnerez immédiatement, ce qui vous permettra de savoir que vous avez oublié de créer un disque sans lancer.

Si, en revanche, vous ne spécifiez pas les valeurs de projection, vous ne saurez que sur la mauvaise implémentation de votre mauvais développeur quand une exception est levée.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top