3

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

我在这里有两个问题:

  1. 什么时候共享 ptr 适合垃圾回收;以及何时使用其他策略,例如扫码?
  2. 在 C 中是否有任何 lib 实现的共享 ptr?

谢谢。

4

2 回答 2

3

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

共享 ptr 消除了处理对象删除的大部分必要性,但有许多复杂性:一次只有一个共享指针可以保存指针。您可能还想查看Boost 的 smart_ptr 指针处理和相关类。

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

我肯定会推荐 Hans Boehm。

于 2012-05-07T07:48:48.763 回答
2

有几篇很好的文章讨论了这个问题:

垃圾收集概要和 C++

上一个 StackOverflow 上的类似问题:垃圾收集与共享指针

我还建议您查看 scoped_ptr。这是区别: shared_ptr 与 scoped_ptr

于 2012-05-07T07:49:25.170 回答