共享 原理 多个对象之间共享一份资源.用对象的声明周期管理动态分配资源的声明周期.没有使用者的时候就析构. 实现 引用计数新对象使用计数+1.对象死亡析构,计数-1.为0释放. 数据成员 数据成员指针.共享数据块指针. 析构 说明 默认delete.也可以自定义析构. 释放 资源释放不一定是内存.也可以是文件,或者硬件. 同类型不同析构 析构被作为多态类的一个数据成员.即模板形式的多态类.构造函数也是模板类型. 计数 为0时释放.仅仅释放类,但是控制块不一定释放.需要若引用为0才释放. 多线程安全 计数 原子操作,即引用计数加减都是引用计数. 安全 多线程安全. 性能 原子操作带来的是性能问题. 不安全 析构不安全. 使用 控制块 不是所有时刻都会创建控制块.即引用计数信息,析构之类. 控制块的创建 make_sharedunique_ptrshared_ptr(T*)原始指针. 原始指针 多次创建shared_ptr,会导致析构多次,未知行为.不要用变量名给shared_ptr赋值.建议直接new. 常见 返回shared_ptr的成员函数.不能用this创建,因为是原始指针. enable_shared_from_this 实现 模板类.shared_ptr有实现对这类函数的子类的特殊处理. 原理 enable_shared_from_this有个weak_ptr存储控制块信息.shared_from_this则用weak_ptr创建对象.shared_ptr创建时才会初始化enable_shared_from_this.不然会报错.即继承了这个类的,必须先创建一个自身的共享指针,才能调用shared_from_this. 补充 建议看源码.全是模板的高级操作.