Sometimes it's very entertaining to browse through the source code.  For 
example, I ran across the following idiom this morning, and it made me 
chuckle:

    if(m_pHeaderSL)                                                         
    {                                                                       
        DELETEP(m_pHeaderSL);                                           
        m_pHeaderSL = NULL;    
    }

Why did I find this funny?  Well, take a look at the definition of the 
DELETEP macro in the following file:

  abi/src/af/util/xp/ut_types.h

It reads:

  #define DELETEP(p)            do { if (p) { delete(p); (p)=NULL; } } while (0)

In short, the whole reason we created those macros was to ensure that all 
delete, free, etc. calls did all of the nice null-sanity work you'd usually 
want.  Thus instead of typing the risky:

    delete m_pHeaderSL;

or the verbose-but-safer:

    if(m_pHeaderSL)                                                         
    {                                                                       
        delete m_pHeaderSL;                                           
        m_pHeaderSL = NULL;    
    }

you could just type:

    DELETEP(m_pHeaderSL);

and be done with it!

bottom line
-----------
We have convenience macros to wrap all of the following calls for pointers:

  free it
  delete it
  vector delete it
  delete and replace it
  ref-count it
  deref-count it 

If you're not sure how to use them, ask!

Paul
motto -- a little macro goes a long, long way

Reply via email to