C ++: Coffre-fort pour utiliser longjmp et setjmp?

Est-il prudent d’utiliser longjmp et setjmp en C ++ sous linux / gcc en ce qui concerne les éléments suivants?

  1. Gestion des exceptions (je n’implémente pas la gestion des exceptions à l’aide de longjmp / setjmp. Je veux connaître les effets secondaires que longjmp / setjmp aura sur la gestion des exceptions standard)
  2. *this pointeur
  3. Les signaux
  4. Des pointeurs intelligents (pointeurs partagés et intrusifs)
  5. Tout ce que vous pouvez penser.

setjmp() / longjmp() renverse complètement le déroulement de la stack et donc la gestion des exceptions ainsi que RAII (les destructeurs en général).

A partir de 18,7 / 4 “Autre support d’exécution” dans la norme:

Si des objects automatiques sont détruits par une exception longjmp(jbuf, val) transférant le contrôle à un autre point (de destination) du programme, un appel à longjmp(jbuf, val) au sharepoint lancement qui transfère le contrôle au même point (de destination) a un comportement indéfini .

Donc, en fin de compte, setjmp() / longjmp() ne joue pas bien en C ++.

Ce n’est pas spécifique à Linux ou à gcc; setjmp / longjmp et C ++ ne fonctionnent pas bien ensemble si vous utilisez longjmp pour quitter un contexte où il existe des variables automatiques avec des destructeurs.

Les destructeurs ne fonctionneront pas, ce qui peut entraîner une fuite de mémoire ou un autre comportement incorrect.

Je n’ai appris que ces commandes et je ne les ai jamais vues en action dans des applications réelles.

À mon humble avis, il est prudent de dire que ce n’est pas sûr de les utiliser: les développeurs ne comprendront pas ce que font ces API “impopulaires”.