Re: [luabind] Destructors
Brought to you by:
arvidn,
daniel_wallin
From: Tom S. <to...@si...> - 2003-04-25 20:26:12
|
> I suppose we could nil all the members of the table > to ensure that the objects can be collected on the first cycle. > > This seems like it would add unnecessary overhead though, it seems more like > an issue with lua's GC than luabind. I agree... i'll bring this up on the lua list, but use the double gc() call in the meantime. > This is a good idea, a __destroy or __finalize function should probably be > added. __finalize sounds better to me. Tom ----- Original Message ----- From: "Daniel Wallin" <dal...@st...> To: <lua...@li...> Sent: Friday, April 25, 2003 5:16 AM Subject: Re: [luabind] Destructors > At 21:15 2003-04-23, you wrote: > > > I'm running into an issue with destruction of luabind classes. If i > >have the code... > > > > class 'my_class1' > > > > function my_class1:__init() > > self.cpp_object = create_cpp_object() > > end > > > > class 'my_class2' > > > > function my_class2:__init() > > self.my_class1 = my_class1() > > end > > > > function my_class2:clean() > > self.my_class1 = nil > > collectgarbage() > > end > > > > _the_class2 = my_class2() > > _the_class2:clean() > > > > > > What happens is that "my_class1:cpp_object" which was created by a > >luabind is not destroyed via it's destructor within the "my_class2:clean()" > >call. I assumed that nil'ing the parent class would automatically nil all > >members of the class since there is no way to define a destructor for a > >luabind class. Is this a bug in the class system or do i need to create my > >own destruction call like... > > When the my_class2 instance is collected, it releases the references to > it's table. However, lua's GC might not collect the objects that are referenced > in the table in the first cycle. You might need to call collectgarbage() > more than > one time to collect all objects. I suppose we could nil all the members of > the table > to ensure that the objects can be collected on the first cycle. > > This seems like it would add unnecessary overhead though, it seems more like > an issue with lua's GC than luabind. > > > self.my_class1.destroy() > > self.my_class1 = nil > > > > ... which in my opinion is nasty. Ideally for me i'd like to see both > >an optional destructor member like "__destroy" called on destruction and > >forced automatic nil'ing of all members after the "__destroy". > > This is a good idea, a __destroy or __finalize function should probably be > added. > > > Daniel Wallin, dal...@st... > > > > ------------------------------------------------------- > This sf.net email is sponsored by:ThinkGeek > Welcome to geek heaven. > http://thinkgeek.com/sf > _______________________________________________ > luabind-user mailing list > lua...@li... > https://lists.sourceforge.net/lists/listinfo/luabind-user > |