Czy można bezpiecznie używać longjmp i setjmp w C++ na linux/gcc w odniesieniu do poniższych?C++: Bezpieczne korzystanie z longjmp i setjmp?
- obsługa wyjątków (nie jestem wdrożenia obsługi wyjątków za pomocą longjmp/setjmp. Chcę wiedzieć, jakie skutki uboczne longjmp/setjmp będą miały na standardowej obsługi wyjątków)
*this
wskaźnik- Sygnały
- Inteligentne wskaźniki (wspólne i natarczywe wskazówki doładowania)
- Cokolwiek jeszcze możesz wymyślić.
Czy możesz wyjaśnić, w jaki sposób longjmp miesza się z jawnym usuwaniem pamięci i destruktorami? – jameszhao00
Ogólnie, gdy istnieje jakiś sposób na opuszczenie zakresu w C++ (return, throw, lub cokolwiek innego), kompilator umieści instrukcje wywołania dtors dla wszelkich zmiennych automatycznych, które muszą zostać zniszczone w wyniku opuszczenia tego bloku. 'longjmp()' po prostu przeskakuje do nowej lokalizacji w kodzie, więc nie daje żadnej szansy na wywołanie dtorsów. Norma jest w rzeczywistości mniej szczegółowa - standard nie mówi, że lekarze nie będą wzywani - mówi, że wszystkie zakłady są wyłączone. Nie można polegać na żadnym szczególnym zachowaniu w tym przypadku. –
Nie jestem zbyt zaznajomiony z inteligentnymi wskaźnikami. Jeśli mam inteligentny wskaźnik na stosie, kiedy robię longjmp, czy oznacza to, że inteligentny wskaźnik nie usunie refcount? Ponadto, czy jestem bezpieczny, jeśli wyłączę wyjątki i piszę kod, który nie zwariuje z longjmp? – jameszhao00