我不确定这是否严格,但我想将共享 ptr 视为垃圾收集策略。
我在这里有两个问题:
- 什么时候共享 ptr 适合垃圾回收;以及何时使用其他策略,例如扫码?
- 在 C 中是否有任何 lib 实现的共享 ptr?
谢谢。
我不确定这是否严格,但我想将共享 ptr 视为垃圾收集策略。
我在这里有两个问题:
谢谢。
如果您想在 C 中进行垃圾收集,请查看Hans Boehm垃圾收集库。
共享 ptr 消除了处理对象删除的大部分必要性,但有许多复杂性:一次只有一个共享指针可以保存指针。您可能还想查看Boost 的 smart_ptr 指针处理和相关类。
但是 shared_ptr 和 Boost 是 C++。你将很难在 C 中实现这一点:shared_ptr 依赖于运算符重载来实现它的魔力。如果没有运算符重载,您将无法知道某个地方是否有人持有您的指针的副本。(这在 C++ 中也是一个问题,但如果在整个代码中使用 shared_ptr,运算符重载会降低风险。)
我肯定会推荐 Hans Boehm。
有几篇很好的文章讨论了这个问题:
上一个 StackOverflow 上的类似问题:垃圾收集与共享指针
我还建议您查看 scoped_ptr。这是区别: shared_ptr 与 scoped_ptr