c++11 shared

c++11 shared,第1张

c++11 shared
    共享

    原理

    多个对象之间共享一份资源.用对象的声明周期管理动态分配资源的声明周期.没有使用者的时候就析构.

    实现

    引用计数新对象使用计数+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.

    补充

    建议看源码.全是模板的高级 *** 作.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5714371.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存