¿Es seguro usar longjmp y setjmp en C++ en linux/gcc con respecto a lo siguiente?C++: ¿es seguro usar longjmp y setjmp?
- manejo de excepciones (no estoy implementar el manejo de excepciones usando longjmp/setjmp. Quiero saber qué efectos secundarios longjmp/setjmp tendrá en el manejo de excepciones estándar)
*this
puntero- señales
- Punteros inteligentes (punteros compartidos e intrusivos de boost)
- Cualquier otra cosa que se te ocurra.
¿Puede explicar cómo longjmp ensucia con la eliminación explícita de memoria y los destructores? – jameszhao00
Generalmente, cada vez que hay alguna forma de salir de un ámbito en C++ (retorno, tiro, o lo que sea), el compilador colocará instrucciones para llamar a los dtors para cualquier variable automática que deba destruirse como resultado de abandonar ese bloque. 'longjmp()' simplemente salta a una nueva ubicación en el código, por lo que no brindará ninguna posibilidad de invocar a los controladores. El estándar es en realidad menos específico que eso: el estándar no dice que no se llamarán dtors, dice que todas las apuestas están desactivadas. No puede depender de ningún comportamiento en particular en este caso. –
No estoy muy familiarizado con los punteros inteligentes. Si tengo un puntero inteligente en la pila, cuando hago un salto largo, ¿significa eso que el puntero inteligente no eliminará un recuento? Además, ¿estoy a salvo si deshabilito las excepciones y escribo código que no se vuelve loco con longjmp? – jameszhao00