减少持久数据结构中的shared_ptrs数
Reduce number of shared_ptrs in persistent data structure
我面临着单向链表类的设计选择。粗略的想法是这样的:
template<typename T>
class List {
public:
...
private:
struct Node {
std::shared_ptr<const T> value;
std::shared_ptr<const Node> next;
};
std::shared_ptr<const Node> node_;
};
是的,我知道有很多shared_ptr
在四处游荡,但那是因为它List
是一个功能性的持久数据结构,需要尽可能多的结构共享。例如,在此实现中,反转列表不需要复制任何元素,并且多个列表可以共享一个公共子列表(通过指向同一个shared_ptr
尾)。
话虽如此,我仍然觉得shared_ptr
可能太多了。有没有办法减少使用的shared_ptr
数量,同时仍然启用结构共享?就像在Node
内组合两个shared_ptr
以减少控制块的开销一样......我不知道,也许没有办法,也许有。欢迎任何想法,即使是完全重新设计List
类。
您希望共享没有结构的数据(相反的情况)。
您想共享结构。
两者都需要共享指针。 但是,如果要减少控制块开销,只要纠缠生命周期,就可以执行此操作。
您可以将 T 的生存期与其节点相关联。 然后,反向节点还需要使原始节点持久化。 这可能会导致结构超出其需求,但使纯正向案例更便宜。
使指向 T 的指针成为原始指针。
创建一个包含 T 和节点的组合结构。
使用make_shared
创建它。
现在,在组合结构中的 T 处将指向 T 的指针指向 T。
接下来,使用别名 ctor 为共享组合结构的控制块的节点创建共享 ptr。
若要反转,请创建一个帮助程序结构,其中包含一个节点和一个共享的 ptr 到节点。 使共享成为帮助程序。 将共享节点 ptr 指向正向节点,将 T ptr 指向正向节点中的 T ptr,然后使用共享 ptr 的别名 ctor 获取共享 ptr 到节点。
我认为这是不值得的。
相关文章:
- 引用 std::shared:ptr 以避免引用计数
- dopen():不以 root 身份运行时"failed to map segment from shared object"
- 无法使用 libtool 将 -shared 参数传递给 g++
- 链接 boost 库时"Error while loading shared libraries"引发的,除了我无法使用 root 访问权限来修复它
- 将共享 ptrs 设置为空
- 解决方法:'can not be used when making a shared object; recompile with -fPIC'使用Cmake。使用普通的 g++ 工作
- gcc -fPIC vs. -shared
- 在shared_from_this()中的错误类型(在继承类中)(是否有dyn.type-ware shared Poi
- 如何将函数 ptr 分配给函数 ptrs 数组(Arduino C++)
- "directory containing symbolic versions of my app's shared libraries"的位置(ndk-stack)
- Qt自定义插件无法加载 - "Shared Library Not Found"
- C - Shared Library - dlopen, dlsym
- ubuntu 12.04 中的 openCV 程序编译错误"libopencv_core.so.2.4: cannot open shared object file: No such file or
- boost::shared_ptr和std::shared-ptr的同居
- 将GoogleMock与Boost::Shared Pointers一起使用时泄漏的Mock对象
- Singleton: C++ shared dll
- Boost Python , python functions and ptrs
- 传递"shared"指针的 OpenMP 任务
- 如何将参数push_back unique_ptr到共享 ptrs 的向量上
- "int *(&arry)[10] = ptrs;"的含义是什么?你怎么读这样的东西?