Некоторые случаи, когда деструкторы могут вызывать проблемы при программировании:
- Аварийное завершение работы программы. pro-prof.com Это происходит, если один из деструкторов вырабатывает исключение во время обработки другого исключения (когда происходит раскрутка стека). pro-prof.com Корректно обработать такое завершение уже не получится. pro-prof.com
- Утечка памяти. pro-prof.com Если деструктор завершает работу исключением, то в памяти могут остаться части текущего класса и базовых классов. pro-prof.com
- Неправильная логика работы деструктора. intuit.ru Например, попытка обращения к объекту, исключённому из списка, или попытка записи в уже закрытый файл. intuit.ru
- Игнорирование кода возврата функций освобождения ресурсов. www.rsdn.org При работе с некоторыми ресурсами такие функции обычно помещают в деструктор, но игнорируют их код возврата, что может приводить к неочевидным ошибкам и сложной отладке. www.rsdn.org
Чтобы избежать проблем, рекомендуется помещать операции, приводящие к исключениям, в отдельные функции и вызывать их отдельно от деструктора. ru.stackoverflow.com Код в деструкторе должен быть максимально простым и не требовать сложной обработки, которая может породить исключение. ru.stackoverflow.com