[ruby-it] Distruttore di classi
Pietro Giorgianni
giorgian a gmail.com
Mar 16 Set 2008 11:40:33 CEST
On Tue, Sep 16, 2008 at 8:49 AM, Michele Casari <lablinux a gmail.com> wrote:
> Per inizializzare una classe c'è "initialize", ma per "distruggerla"?
> Lo so che il Garbage collection fa un ottimo lavoro, ma non sa quali
> sono le operazioni che la mia classe deve fare nel momento in cui viene
> eliminata.
qui: http://pleac.sourceforge.net/pleac_ruby/classesetc.html
ho trovato quest'esempio:
class MyClass
def initialize
ObjectSpace.define_finalizer(self,
self.class.method(:finalize).to_proc)
end
def MyClass.finalize(id)
puts "Object #{id} dying at #{Time.new}"
end
end
# test code
3.times {
MyClass.new
}
ObjectSpace.garbage_collect
tuttavia, nella stessa pagina si spiega che non c'è modo di sapere
quando il garbage collector sarà invocato, a meno di non invocarlo
esplicitamente.
pertanto, se la tua classe deve fare delle operazioni quando non viene
più usata, è sempre meglio invocare esplicitamente un qualche metodo
della stessa, in modo che chiuda le eventuali connessioni, i file
temporanei o quant'altro.
questo perché, a meno di esempi un po' sciocchi, come quello
precedente, o come, che so, a = MyClass.new; a = 3, spesso gli oggetti
rimangono in vita per più tempo di quello che ci si potrebbe aspettare
(ad esempio, per tutta la durata di esecuzione di un metodo, se non la
classe intera).
More information about the Ml
mailing list