We have a C++ library that we provide to several different clients. Recently we made the switch from using raw pointers in the public interface to using boost::sharedptr instead
This is C++. You know, you could template the interface class over the shared pointer implementation.