Google的linked_ptr实现和linked_ptr的实用性

时间:2015-03-28 19:48:54

标签: c++ smart-pointers

我最近发现了一种名为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?

1 个答案:

答案 0 :(得分:0)

如果你遗失了什么,我也必须错过它。我发现这个谷歌搜索大致相同的问题,因为我不能老实地想到一个用于Linked_ptr的用例,其中shared_ptr不会更好。

这表示linked_ptr已被unique_ptr弃用,因为Chromium现在包含C ++ 11。但是我对语义的理解会使它与shared_ptr更相似。