Я не совсем понимаю, почему есть финализаторы на таких языках, как java и С#. AFAIK, они:
- не гарантируется выполнение (в java)
- если они выполняются, они могут запускать произвольное количество времени после того, как объект, о котором идет речь, становится кандидатом на финализацию.
- и (по крайней мере, в java), они понесут потрясающе огромную производительность, даже если она попала в класс.
Так почему они были добавлены вообще? Я спросил друга, и он что-то пробормотал: "Вы хотите иметь все возможности для очистки вещей, таких как соединения с DB", но это кажется мне плохой практикой. Почему вы должны полагаться на что-то с вышеописанными свойствами на что угодно, даже в качестве последней линии защиты? Особенно, когда, если что-то подобное было разработано в любом API, API API будет смеяться от существования.