[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Re: Why table does not have the __gc event?
- From: Chris Marrin <chris@...>
- Date: Tue, 17 Jan 2006 08:09:34 -0800
Klaus Ripke wrote:
On Mon, Jan 16, 2006 at 12:47:53PM +0800, CHU Run-min wrote:
Thanks, I understand it.
But lua-5.1 manual seems confusing me. It says
"Finalizers allow you to coordinate Lua's garbage collection with
external resource management (such as closing files, network or
database connections, or freeing your own memory). "
For the most part this should be viewed as a desperate measure
of last resort only.
I'm not sure how desperate it is. The point of having __gc is to release
resources. For tables and strings, those resources are owned by Lua and
it therefore releases them without any intervention from you. Since
neither tables nor strings have any user controlled data, they have no
need for an externally accessible __gc method. If you want to put some
user controlled resources into a table, you should wrap them in a
userdata, which does have an __gc method. Then you get a chance to
release them. Because this method might not run for a long time, a
resource might be kept for longer than you expect, so you may want an
explicit destroy to control this. But the system is consistent. If you
implement __gc properly the resource will exist for as long as your
object exists, then it will cease to exist.
--
chris marrin ,""$, "As a general rule,don't solve puzzles
chris@marrin.com b` $ that open portals to Hell" ,,.
,.` ,b` ,` , 1$'
,|` mP ,` :$$' ,mm
,b" b" ,` ,mm m$$ ,m ,`P$$
m$` ,b` .` ,mm ,'|$P ,|"1$` ,b$P ,` :$1
b$` ,$: :,`` |$$ ,` $$` ,|` ,$$,,`"$$ .` :$|
b$| _m$`,:` :$1 ,` ,$Pm|` ` :$$,..;"' |$:
P$b, _;b$$b$1" |$$ ,` ,$$" ``' $$
```"```'" `"` `""` ""` ,P`