Раскрутка стека и вызов деструкторов выполняется только если мы смогли поймать исключение try catch, иначе вызывается terminane без раскрутки и вызовов деструкторов
@mesyarik
3 ай бұрын
Формально это implementation-defined и нельзя утверждать ни того, что вы утверждаете, ни того, что они обязательно вызовутся. Читаем cppreference: std::terminate() is called by the C++ runtime when the program cannot continue for any of the following reasons: 1) an exception is thrown and not caught (it is implementation-defined whether any stack unwinding is done in this case) На практике в g++, кажется, они и правда не вызовутся, но полагаться на это нельзя. А вообще мы вроде рассматриваем этот пример на следующей лекции и как раз обсуждаем, вызовутся они или нет.
@egoryurchenko7847
3 ай бұрын
@@mesyarik Да, действительно implementation-defined. Спасибо огромное за ваши подробные и очень информативные лекции, и за возможность учиться бесплатно для тех, кто этого хочет с любой точки мира. Подчеркиваю для себя очень интересные детали из лекций. Еще интересно есть ли в открытом доступе ПЗ по курсу?
Пікірлер: 4