В С++ нет столь удобной конструкции finally. Как бы печально то ни было, но это так. Есть подход с написанием define-а на finally в таком духе:
#define finally(FUNC) \
catch ( ... ) \
{ \
MLASTERROR;\
FUNC\
throw; \
} \
FUNC
Можно использовать goto. Как бы там Дейкстра его ни критиковал, в таком месте написать "один маааленький goto" (с) xkcd - можно и даже нужно. В метку по нему можно свалить освобождение ресурсов, условный вывод ошибок и все прочее, что должно делаться в С# в блоке finally.
А, картинка кстати вот:
#define finally(FUNC) \
catch ( ... ) \
{ \
MLASTERROR;\
FUNC\
throw; \
} \
FUNC
Можно использовать goto. Как бы там Дейкстра его ни критиковал, в таком месте написать "один маааленький goto" (с) xkcd - можно и даже нужно. В метку по нему можно свалить освобождение ресурсов, условный вывод ошибок и все прочее, что должно делаться в С# в блоке finally.
А, картинка кстати вот:
Комментариев нет:
Отправить комментарий