1、线程安全级别
shared_ptr的线程安全级别和内建类型、标准库容器、std::string一样,即:一个shared_ptr对象实体可被多个线程同时读取两个shared_ptr对象实体可被两个线程同时写入,“析构”算写操作如果要从多个线程读写同一个shared_ptr对象,那么需要加锁。
....请注意,以上shared_ptr对象本体的线程安全级别,不是它管理的对象的线程安全级别
2、循环引用
shared_ptr 是管理共享资源的利器,需要注意避免循环引用,通常的做法是 owner 持有指向 child 的 shared_ptr,child 持有指 owner 的 weak_ptr。
3、生命周期
shared_ptr 是值语意,当心意外延长对象的生命期。例如 boost::bind 和容器都可能拷贝 shared_ptr。
4、enable_share_from_this使用场景
当类A被share_ptr管理,且在类A的成员函数里需要把当前类对象作为参数传给其他函数时,就需要传递一个指向自身的share_ptr。