Название: (С++11) Реализация try/finally Отправлено: navrocky от Август 08, 2014, 08:41 Предлагаю свою реализацию так и не вошедшей в новый стандарт конструкции finally. В boost есть аналог Boost.ScopeExit, но он более многословен, хотя работает и со старым стандартом C++.
Пример использования: Код
Вывод: Init Work1 Finalize Также финализацию можно отменить по ходу исполнения: Код
UPD 25.08.2014 Исправлена ошибка многократного срабатывания функтора освобождения, проявляющаяся на компиляторах MSVC в отладке, когда отключена оптимизация возврата объекта по значению. Название: Re: Реализация try/finally для C++11 Отправлено: ammaximus от Август 08, 2014, 20:22 Насколько я смог понять, вы решили проблему с RAII, когда в деструкторе объектов возможны исключения и двойное исключение крашило программу. Кажется в java-style остается исключение из finally как последнее, а у вас первоначальное, что тоже лучше. Жаль, что пока не могу использовать с++11.
Название: Re: Реализация try/finally для C++11 Отправлено: navrocky от Август 10, 2014, 12:36 Насколько я смог понять, вы решили проблему с RAII, когда в деструкторе объектов возможны исключения и двойное исключение крашило программу. Кажется в java-style остается исключение из finally как последнее, а у вас первоначальное, что тоже лучше. Да, всё именно так, обычный try/catch в деструкторе.Название: Re: Реализация try/finally для C++11 Отправлено: Igors от Август 10, 2014, 13:47 а так костылей можно много на городить, причем они еще будут и побочные эффекты давать ... А вот свой костыль таковым не считается :)Название: Re: Реализация try/finally для C++11 Отправлено: navrocky от Август 10, 2014, 15:39 а так костылей можно много на городить, причем они еще будут и побочные эффекты давать ... А вот свой костыль таковым не считается :)Это не костыль. Это вариант реализации. Название: Re: Реализация try/finally для C++11 Отправлено: navrocky от Август 25, 2014, 14:30 Исправлена ошибка многократного срабатывания функтора освобождения, проявляющаяся на компиляторах MSVC в отладке, когда отключена оптимизация возврата объекта по значению.
В шапке файл обновил. |