最近,我发现了一种有趣的类型为linked_ptr的智能指针,该指针支持共享所有权而无需分配堆内存,但性能/内存开销更小。

我发现了两种实现-在双链表(example implementation,与原始指针相比具有x3的内存开销)和在循环单链表(example implementation from Google,x2的内存开销,但渐近较慢)。

我的第一个问题是:为什么第二个实现在复制构造函数中复制的元素之前插入新元素?它负责O(n)时间,其中n是列表的大小;虽然在之后插入新元素似乎容易得多,如下所示:

void join(linked_ptr_internal const* ptr) {
    next_ = ptr->next_;
    ptr->next_ = this;
}

或者,也许我缺少了什么?

其次,linked_ptr有多有用?如果对同一对象的引用数量很少,这似乎非常好。为什么例如在boost中没有实现呢?

最佳答案

如果您丢失了某些东西,我也必须丢失它。我发现这个Googling大致上是相同的问题,因为我无法诚实地考虑到shared_ptr不会更好的linked_ptr的用例。

这说明unique_ptr不推荐使用linked_ptr,因为Chromium现在包含了C++ 11。但是我对语义的理解会使它与shared_ptr更加相似。

关于c++ - Googlelinked_ptr的实现和linked_ptr的实用性,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29321793/

10-11 18:21