Use C++11's smart pointer instead of boost::shared_ptr