Next Previous Contents

34. <4.2.4>: Død og begravelse: Finalize

Objekter fødes, brukes og dør. I Ruby dør objektene når de hentes av søppeltømmeren. (garbage collector) Når det skjer, er usikkert. Ingen referanser til objektet må eksistere og garbage collectoren må startes eksplisitt eller implisitt, f.eks. når det begynner å bli lite ledig minne.

  1| streng = "Hvil i fred."
  2| 
  3| # Vi gir en block som skal kjøres når streng objektet dør.
  4| ObjectSpace.define_finalizer(streng){|id|
  5|   puts "Objektet med ID=#{id} er nå dødt. "
  6|   puts "Rest in peace."
  7| }
  8| 
  9| # Starter søppeltømmeren eksplisitt.
 10| puts "Henter søppel!"
 11| GC.start
 12| # Men ingenting skjer, da det ennå er en referanse til strengen.
 13| 
 14| # Prøver en gang til...
 15| streng = nil
 16| puts "Henter mer søppel!"
 17| GC.start
 18| # finalizer blocken blir kjørt.

Legg merke til at objektet allerede er dødt når finalizer-blokken kalles. Ressurser som må lukkes eksplisitt, holdes via bindingen til blokken. (Bare pass på at blokken ikke også holder en referanse til objektet.)

Flere finalizere kan registreres på et objekt.


Next Previous Contents