Hi,

This is now well documented (
https://www.enlightenment.org/develop/tutorials/c/eo-refcount.md) but the
more I use efl_add the more I feel it is confusing especially to new
developers.

In the current model (if I understand it correctly)
1) child = efl_add(klass, parent) means the child must NOT be unfeferenced
2) child = efl_add(klass, NULL) means the child should be unreferenced
3) child = efl_add_ref(klass, parent) means the child must be unreferenced
4) child = efl_add_ref(klass, NULL) somehow means that the child should be
unreferenced twice

In my opinion 1) and 4) are peculiar and so I provide a proposal to fix
this:

We could change efl_add to return void. It never retains a reference. If
the parent is NULL then it should be automatically unref before returning.
Then efl_add_ref would be changed to mirror this and always retain exactly
1 reference - so if parent is NULL there is no double count returned.

Using this model if an Eo * is returned then I know I have a reference and
must later unref.
Any need for using the pointer in an efl_add (which is no longer returned)
would still be supported through efl_added within the constructor.

What do people think about this? I put the suggestion forward to improve
the symettry with add and unref which is currently confusing. If my
assumptions above are incorrect please let me know!

Thanks,
Andy
-- 
http://andywilliams.me
http://ajwillia.ms
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, Slashdot.org! http://sdm.link/slashdot
_______________________________________________
enlightenment-devel mailing list
enlightenment-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-devel

Reply via email to