Hi, I have studied the sp_counted_base implementation and I can't see how it is trade safe. For instance: bool add_ref_lock() // true on success { pthread_mutex_lock( &m_ ); bool r = use_count_ == 0? false: ( ++use_count_, true ); pthread_mutex_unlock( &m_ ); return r; } void release() // nothrow { pthread_mutex_lock( &m_ ); long new_use_count = --use_count_; pthread_mutex_unlock( &m_ ); if( new_use_count == 0 ) { dispose(); weak_release(); } } I suppose to exist a race condition because I can't execute the comparation "if( new_use_count) == 0" outside of critical region delimited by mutex. So if: 1. Reference count = 1 2. Thread A executes release and is interrupted after execute the comparation if( new_use_count) == 0 (the comparation returns true) 3. Thread B executes add_ref_lock, then Ref count = 1 4. Thread A executes "dispose()" and releases the pointer ! What Do you think about ? Eduardo Panisset.