关于shared_ptr

时间:2012-05-07 07:44:03

标签: c garbage-collection shared-ptr

我不确定是否严格要求,但我想将共享ptr视为垃圾收集策略。

我在这里有两个问题:

  1. 什么时候共享ptr适合垃圾收集;当其他策略如mark-sweep?
  2. C中是否有任何lib实现了共享ptr?
  3. 感谢。

2 个答案:

答案 0 :(得分:3)

如果您想在C中进行垃圾收集,请查看Hans Boehm垃圾收集库。

共享ptr消除了处理对象删除的大部分必要性,但是有许多复杂情况:一次只有一个共享指针可以保存指针。您可能还想查看Boost's smart_ptr pointer handling及相关课程。

但是shared_ptr和Boost是C ++。你将很难在C中实现这一点:shared_ptr依赖于运算符重载来实现它的魔力。如果没有运算符重载,您无法知道某个人是否持有指针的副本。 (这在C ++中也是一个问题,但如果在整个代码中使用shared_ptr,则运算符重载会降低风险。)

我肯定会推荐Hans Boehm。

答案 1 :(得分:2)

有一些好文章谈到这个:

Garbage Collection Synopsis, and C++

StackOverflow上的类似问题:Garbage collection vs. shared pointers

我还建议你研究一下scoped_ptr。这是差异: shared_ptr vs scoped_ptr