Re: GObject Destruction



Il Tue, 18 Dec 2012 19:46:40 +0100 David Nečas <yeti physics muni cz> scrisse:

> On Tue, Dec 18, 2012 at 07:19:33PM +0100, Nicola Fontana wrote:
> > I always free dynamic stuff (included allocated memory) in
> > dispose(), not in finalize(), protecting it from double calls.
> > There you should have a still valid instance to query.
> 
> GObject gives the following, somewhat contradictory, requirements for
> dispose():
> 
>     When dispose ends, the object should not hold any reference to any
>     other member object. The object is also expected to be able to
>     answer client method invocations (with possibly an error code but no
>     memory violation) until finalize is executed. dispose can be
>     executed more than once.  dispose should chain up to its parent
>     implementation just before returning to the caller.
> 
> If you free everything in dipose() you may have troubles with the ‘able
> to answer client requests’ part.

That really depends on how you handle the data you are freeing.

I always wondered if this double step finalization is hystorical
craft. Why not drop finalize() altogether and avoid double dispose
calls directly from libgobject? You'd need to protect your code from
NULLs (something not new in C) but the finalization would be way
cleaner.

Ciao.
-- 
Nicola


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