Информация об изменениях

Сообщение Re[3]: Обработка ошибок в деструкторе своего умного указател от 23.12.2022 14:20

Изменено 23.12.2022 14:39 andyp

Re[3]: Обработка ошибок в деструкторе своего умного указателя
Здравствуйте, Sm0ke, Вы писали:


S>Сам clear() напрямую ничего не кидает. Но в нём set и list могут бросить.


Ну да, это и имел в виду. Вместо try-catch надо сделать scope guard, который в конструкторе запомнит std::uncought_exceptions() перед вызовом clear, а после, в своем деструкторе, почистит что надо, если счетчик std::uncought_exceptions() увеличился.

Пример такой штуки есть в https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4152.pdf
Re[3]: Обработка ошибок в деструкторе своего умного указател
Здравствуйте, Sm0ke, Вы писали:


S>Сам clear() напрямую ничего не кидает. Но в нём set и list могут бросить.


Ну да, это и имел в виду. Вместо try-catch надо сделать scope guard, который в конструкторе запомнит std::uncaught_exceptions() перед вызовом clear, а после, в своем деструкторе, почистит что надо, если счетчик std::uncaught_exceptions() увеличился.

Пример такой штуки есть в https://www.open-std.org/jtc1/sc22/wg21/docs/papers/2014/n4152.pdf