【问题标题】:Does C++ have a Garbage Collector?C++ 有垃圾收集器吗?
【发布时间】:2011-02-23 09:39:20
【问题描述】:

我目前正在阅读一份未发表的硕士论文报告,我将提供反馈。

在报告中,他们提到了原生 C++ 和托管 C++ 下的 GC。我以为 C++ 没有任何标准的 GC,我是对还是错? (他们没有提到 Boehm-Demers-Weiser。)

他们在某些条件下无法正常工作。它们在一个线程中创建对象,并从另一个线程中删除指针。

【问题讨论】:

  • TR1 算不算?
  • @kotlinski 请不要打扰你不知道的技术。我从未使用过托管 C++,但它的继任者 - C++/CLI 是 .NET 生态系统的重要组成部分。
  • 对不起,不知道它是生态系统的一部分。
  • 小心垃圾收集,因为您仍然可能遇到问题。见codeproject.com/KB/showcase/IfOnlyWedUsedANTSProfiler.aspx

标签: c++ garbage-collection


【解决方案1】:

默认情况下,Native C++ 没有这样的东西(最接近的是智能指针,但这仍然是完全不同的东西),但这并不妨碍您编写自己的垃圾收集解决方案(或使用 third party solution )。

托管 C++(及其后继 C++/CLI)当然对托管资源使用 .NET 垃圾回收(尽管本机资源不是垃圾回收,并且必须像在本机 C++ 中那样手动管理)。

【讨论】:

  • C++0x 明确允许实现包含垃圾收集器。
【解决方案2】:

1998/2004 的现有 C++ 标准未指定垃圾收集器。 即将到来的标准 C++0x 确实指定了一个可选的垃圾收集器 API,但实现是另一部分。 尽管如此,编译器供应商和第三方提供了可用于 C++ 的垃圾收集器。

  • GCC 套件为垃圾收集提供 Boehm-GC。
  • 托管 C++ 是 Microsoft 随 .Net 1.0 发布的 C++ 扩展,它通过垃圾收集功能扩展了 C++。
  • 还有来自 Microsoft 的 C++/CIL 随 .Net 2 一起发布,它弃用了具有更多以 .Net 为中心的功能的托管 C++。
  • Sun 提供 libgc 作为 C/C++ 的垃圾收集器。

【讨论】:

    【解决方案3】:

    C 和 C++ 的唯一 GC 库是 Hans-Boehm library,但据我所知很难设置。

    【讨论】:

      【解决方案4】:

      我对 C++ 下的 GC 有不同的看法。

      看看MCP(开源许可证 GPLv3)——使用 C++ 的 GC 不应该比 GJC / Mono 差。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-04-01
        • 2023-03-30
        • 2019-11-08
        • 2011-11-17
        • 1970-01-01
        • 1970-01-01
        • 2011-09-28
        • 2010-12-16
        相关资源
        最近更新 更多