我最近发现了一种名为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?
答案 0 :(得分:0)
如果你遗失了什么,我也必须错过它。我发现这个谷歌搜索大致相同的问题,因为我不能老实地想到一个用于Linked_ptr的用例,其中shared_ptr不会更好。
这表示linked_ptr已被unique_ptr弃用,因为Chromium现在包含C ++ 11。但是我对语义的理解会使它与shared_ptr更相似。