Re: destroing data attached to a type (qdata)



Stefan Kost wrote:
hi,

I have an interface, where I share some data between the instances. the data is created on first access. Now I also would like to release it when the last instance goes.

problem 1: base_finalize() is not called for static types

I thought that I could do some own ref-counting and then do g_object_weak_ref on the instances to decrement the ref-count.

problem 2: There is nothing in the GTypeInfo for an iface that is called for each new instance (using instance_init causes g_type_register_static (G_TYPE_INTERFACE,...) to fail as one does not really instantiate the iface, but the type that implements it).

Any ideas?

I don't think this method will work -- I'm pretty sure GTypes (esp static types) never get destroyed, even after their last instance is destroyed.

Probably your best bet would be to create your shared data in the instance_init function on first run (just make it a static global var in the file), and then refcount it. When your last instance is destroyed, the refcount of the shared data drops to zero and you can destroy it.

        -brian




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