Re[73]: ToString()
От: Дарней Россия  
Дата: 01.12.04 05:09
Оценка: 47 (3)
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Отчего же... Наоборот, хотят языковую поддержку для move constructors ввести. Это не "грабли", это "фича" — специальный способ указать на передачу владения. Если эта семантика не нужна, следует использовать другие указатели.


Нужно было просто не делать передачу владения неявной. И не пришлось бы тогда писать вумные книжки с советами наподобие "никогда не создавайте контейнеры из auto_ptr". Мне например кажется просто диким, что operator= изменяет свой правый аргумент.

И все-таки, возвращаясь к деструкторам. Допустим, Dispose бросает исключение. и часть объектов остались незавершенными. Однако завершение остальных объектов будет продолжаться.
С++ в аналогичной ситуации просто "умывает руки", и вообще отказывается освобождать ресурсы проги. Можно конечно попытаться это сделать из terminate, но я сомневаюсь, что из этого может получиться что-то путное. В семействе NT это не будет иметь катастрофических последствий, но то же самое нельзя сказать про ряд других ОС. Плюс к этому, прога может иметь ряд ресурсов, которые не управляются ОС — сеансы работы на сервере приложений, транзакции БД, например. Они конечно будут закрыты через некоторое время по таймауту, но за это время "повисшие" ресурсы могут парализовать работу ряда других юзеров. В результате такое поведение проги может вызвать неопределенное поведение в рамках всей операционной системы юзера, или в рамках корпоративной ИС
С этой точки зрения намного правильнее все-таки попытаться освободить ресурсы, какие получится. И только после этого — может быть, завершить программу.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.