lua-users home
lua-l archive

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


Op 15 apr. 2015 10:02 schreef Laurent FAILLIE <l_faillie@yahoo.com>:
>
> Hello,
>
> I would like to have some clarification about the way I can implement à destructor of a C object.
> As per http://www.lua.org/pil/29.1.html, it should be implemented using __gc but ... when will it be called.
>
> I have an object that is managing a windows and I would like to ensure this windows is destroyed as soon as it's representing object is not anymore used.
>
> In other words,
> for a code like 
>
> if somestuff then
>     wnd = SelSurface.create()
>     ... bla bla bla ..

I think the only way is to manually destroy it. Insert something like;
     wnd:destroy()
Or manually run a GC cycle.
If you create a userdata, have a flag for it being alive or closed. When calling destroy, get rid of everything you need to clean up and flag it as closed. Any further access of the closed userdata should now result in an error. Still leaves the user data itself to be cleaned up by the GC.

> end
>
> I would like to be sure the window is destroyed as soon as the code leave the "if" statement and not when the GC decided to run.
>
> Thanks
>
> Laurent
>  
> ----
> The misspelling master is on the Web.
>   _________ 100 % Dictionnary Free !
> /               /(
> / Dico       / / Pleins d'autres fautes sur
> /________/ / 
> (#######( / http://destroyedlolo.info
> Quoi, des fautes d'orthographe! Pas possible ;-D.