Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 关于共享ptr_C_Garbage Collection_Shared Ptr - Fatal编程技术网

C 关于共享ptr

C 关于共享ptr,c,garbage-collection,shared-ptr,C,Garbage Collection,Shared Ptr,我不确定这是否严格,但我想将共享ptr视为一种垃圾收集策略 我这里有两个问题: 何时共享ptr适合垃圾收集;当其他策略,如马克扫荡 在C中是否有实现共享ptr的库 谢谢。如果您想在C中进行垃圾收集,请查看垃圾收集库 共享ptr消除了处理对象删除的大部分必要性,但有许多复杂问题:一次只有一个共享指针可以容纳指针。您可能还需要查看和相关的类 但SydDypPTR和Boost是C++。在C中,您将很难实现这一点:shared_ptr依靠操作符重载来实现它的魔力。如果没有运算符重载,您就无法知道某个地方

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

我这里有两个问题:

  • 何时共享ptr适合垃圾收集;当其他策略,如马克扫荡
  • 在C中是否有实现共享ptr的库

  • 谢谢。

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

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

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


    我当然会推荐汉斯·博姆。

    有几篇好文章谈到这一点:

    先前关于StackOverflow的类似问题:

    我还建议您研究范围内的ptr。区别如下:

    OP询问C,而不是C++。我不确定你所发布的内容是否适用于C语言。@Ayush这些文章中的一些解释很好也很有用。你把共享ptr当作垃圾收集策略是什么意思?您的意思是比较共享指针(在GC世界中称为引用计数)和标记扫描吗?我认为boost实现了共享指针:。在这里阅读更多信息:@smichak是的,我想看看Q1不同垃圾收集技术之间的比较。这个库很酷,我会检查它。我想在得到解放前先想点主意。谢谢