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