Here's the text from an Objects slide that is part of a DirectFB usage 
presentation I put together (and will hopefully someday find time to update the 
Wiki with):

  DirectFB API uses a basic component object model

  + API functionality is partitioned into interfaces which are used 
    to access and control the functionality of the associated underlying 
    object.

  + Each object maintains its own lifetime and destroys itself after all 
    outstanding references to it via its interfaces have been released.

  + Every interface has AddRef() and Release() functions for explicitly 
    incrementing and decrementing an object's reference count.

      + Calling the various DirectFB GetXXX() or CreateXYZ() functions 
        throughout the API each results in an implicit reference count 
        increase - as if AddRef() on the interface had been called.

  + Release references to obtained interfaces after they are no longer 
    needed for proper resource clean-up!

      + For every reference count increment, ensure there is an equivalent 
        number of decrements.

BTW:  Here's some COM coding conventions my team and I developed for the 
Universal 3D Sample Software project that also apply for proper usage when 
using the DirectFB API:

  + When passing an interface pointer to a function, the caller must not 
    release the interface pointer until the called function returns. This 
    needs to be specifically adhered to when multithreading or reentrancy 
    is involved.

  + When a copy of an interface pointer is made that will exist in a wider 
    scope than the original pointer, the interface's AddRef function must 
    be called. When the copy is no longer necessary, the interface's Release 
    function must be called. For example, if a function 
    "Register( IDirectFBSurface* pSurface )" of a component CSurfaceAnimation 
    takes as an argument a pointer to the interface IDirectFBSurface and in 
    the Register function implementation, it copies that pointer into the 
    CSurfaceAnimation data member m_pSurface, the AddRef function for the 
    IDirectFBSurface interface must be called. Immediately before destroying 
    the instance of CSurfaceAnimation, m_pSurface should have its Release 
    function called (provided it is non-NULL).

  + When a client is finished using a component or interface that it has 
    ownership of, the client must call the interface's Release function.
    Note: A client will have ownership of an interface if it ever called a 
    function to receive an interface pointer to a component or it called the 
    AddRef function on the interface (and hopefully kept a pointer to it).

Best regards,
Timothy

--

Timothy Strelchun
CE Software Engineering
Digital Home Group
Intel Corporation

The views expressed above are my own and not those of Intel
_______________________________________________
directfb-users mailing list
directfb-users@directfb.org
http://mail.directfb.org/cgi-bin/mailman/listinfo/directfb-users

Reply via email to