Пайдаланылмаған объектілерді жою және finalize әдісі. Java-да finalize () әдісі бар. Трейлингті шығаратын сыныпта болса
объект қоқыс жинағыш арқылы жойылғанға дейінгі әрекеттер, бұл әдісті қайта анықтау, ол сияқты ол деструкторды ауыстырудың бір түрі ретінде қызмет ете алатын сияқты көрінуі мүмкін. Бірақ сол сәттен бастап
объектінің жойылуы анықталмаған және уақыт өте алысқа жатқызылуы мүмкін нысанға сілтеме жоғалған кезде, соңғы әдіс нақты ауыстыру ретінде қызмет ете алмайды деструктор. Тіпті әдіс шақыруынан кейін бірден System.gk () қоқыс жинағышына нақты қоңырау finalize () өте жақсы шешім емес, өйткені бұл жағдайда дұрыстығына кепілдік жоқ ресурстарды шығару тәртібі. Сондай-ақ, қоқыс жинаушы ресурсты қажет етеді және
кейбір жағдайларда ол бағдарламаны белгілі уақытқа кідіртуі мүмкін. Неғұрлым қарапайым және дұрыс шешім базалық сыныпта жазу болар еді
Сіз дамытатын иерархия, жою () әдісі «жойыңыз, жойыңыз», ол болады
барлық қажетті көмекші әрекеттерді орындаңыз (әдісті шақыруға болады
dispose () - «құтылу, құтылу», босатуға болады () - «шығару»). Оның үстіне, бірге Қажет болса, туынды сыныптарда бұл әдісті қайта анықтау қажет болады. Қашан болған жағдайда негізгі деструкторды шақыру керек, super.destroy () шақыруын жасау керек. .. Сонымен бірге
оның кластағы деструктордағы соңғы оператор болғаны жөн - әйтпесе
деструктордың логикасы дұрыс емес болуы мүмкін. Мысалы, әрекет жасаладытізімнен шығарылған нысанға қол жеткізу немесе әлдеқашан жабылған файлға жазу әрекеті. Объектілерді жою логикасы оларды құру кезінде қолданылатын логикаға қарама-қарсы:
біріншіден, сыныпқа жататын бөліктің өзі жойылады. Содан кейін бөлік құлап кетеді тікелей ұрпаққа қатысты және одан әрі иерархия бойынша бөлікпен аяқталатын, базалық класқа жатады. Сондықтан деструктордың соңғы операторы шақыру болып табылады super.destroy деструкторы ().
Күрделі объектілер үшін деструкторлар мәселесі. Егер объект қайта тірілген болса, онда оны аяқтаушы қайтадан шақырылады ма, жоқ па деген сұрақ туындайды, ол жойылғанда - деструкторлардан айырмашылығы, пысықтаушылар бірнеше рет аталады. Егер аяқтаушылар қайта тірілуге арналған объектілерге шақырылса, объектілер қайта-қайта тіріліп, жойылмайтын болуы мүмкін; бұл Python 3.4-ке дейін CPython енгізуінде және C # сияқты CLR тілдерінде орын алады. Бұған жол бермеу үшін көптеген тілдерде, соның ішінде Java-да, Objective-C-де (ең болмағанда Apple-дің соңғы нұсқаларында) және Python 3.4-тен Python, нысандар ең көп дегенде аяқталады, бұл объект әлі аяқталғанын қадағалауды қажет етеді.