1 .基于共享内存的共享指针实现方法,其特征在于,包括:
构建构造函数,其中,所述构造函数对应至少一种构造方式的处理逻辑;
构建赋值函数,其中,所述赋值函数对应至少一种赋值方式的处理逻辑;
构建原子交换函数,得到所述共享指针。
2.根据权利要求1所述的方法,其特征在于,所述构造方式,包括:默认构造、对象指针
构造、拷贝构造以及可变参数构造;
所述默认构造的处理逻辑为将对象指针及引用计数指针初始化为nullptr,将使用的
共享内存类型设置为none;
所述对象指针构造的处理逻辑为根据传入的共享内存类型在对应的共享内存池中申
请引用计数指针,同时将引用计数置为1;
所述拷贝构造的处理逻辑为将当前shared_ptr的对象指针、引用计数指针、共享内存
类型赋值为入参对应属性,同时将引用计数加1;
所述可变参数构造的处理逻辑为识别传入的共享内存类型,调用模板参数的可变参数
构造方法在对应的共享内存池中分别构造对象指针以及引用计数指针。
3 .根据权利要求2所述的方法,其特征在于,所述构造方式,进一步包括将shared_ptr
与nullptr进行运算符比较的构造方式;
相应的,该构造方式的处理逻辑与所述默认构造的处理逻辑相同。
4 .根据权利要求1所述的方法,其特征在于,所述构造函数,进一步包括:指向同类型
const指针的拷贝构造函数;提供从shared_ptr<const T>至shared_ptr<T>的类型转换。
5 .根据权利要求1所述的方法,其特征在于,所述赋值方式,包括:同类型赋值;
所述同类型赋值的操作逻辑为:释放左值,释放操作首先创建多线程内存屏障,然后对
左值的引用计数减1,同时判断减1前的old_ref_count是否为1,若为1则显式调用删除对象
指针以及引用计数指针。并将左值的对象指针、引用计数指针成员变量置为nullptr。然后
将右值的对象指针、引用计数指针、共享内存类型赋值给左值,若右值的引用计数指数不为
空的话,则将引用计数加1。
6 .根据权利要求5所述的方法,其特征在于,所述赋值方式,进一步包括:同类型const
指针的赋值操作以及同类型引用的赋值操作;
所述同类型const指针的赋值操作的操作逻辑为:会对入参进行Assignable静态检查,
之后执行上述所述同类型赋值的操作逻辑。
所述同类型引用的赋值操作与所述同类型赋值的操作逻辑相同。
7 .根据权利要求1所述的方法,其特征在于,所述原子交换函数的处理逻辑,包括:
通过swap额外定义tmp变量用于存放左值;
在所述左值赋值后将tmp存放的变量赋值给右值从而实现两个shared_ptr的原子交
换。
8.基于共享内存的共享指针实现装置,其特征在于,包括:
第一构建单元,用于构建构造函数,其中,所述构造函数对应至少一种构造方式的处理
逻辑;
第二构建单元,用于构建赋值函数,其中,所述赋值函数对应至少一种赋值方式的处理
逻辑;
权 利 要 求 书
1/2 页
2
相关文档
评论