У меня сложилось впечатление, что использование setjmp()
и longjmp()
в C ++ почти гарантированно испортит стек, поскольку эти функции не выполняют раскручивание, как, скажем, исключения. Эта страница MSDN , однако, указывает, что реализация Microsoft может быть вызвана для вызова деструкторов локальных объектов, что подразумевает, что осторожное использование этих функций может быть безопасным.
Существуют ли переносимые средства обеспечения правильности программы при использовании setjmp()
и longjmp()
в C ++? Лучшие практики в C ++ указывают, что исключения лучше всего не использовать для управления потоком, но в ситуации, которая требует крайне необычного потока (например, сопрограммы и замыкания), всегда ли предпочтительнее использовать исключения вместо этих функций?