2011-02-23 76 views
14

我正在阅读一篇未发表的硕士毕业论文报告,我将就此提供反馈意见。C++有垃圾收集器吗?

在报告中,他们提到GC在本机C++下,并管理C++。我认为C++没有任何标准GC,我错了还是对吗? (他们没有提到Boehm-Demers-Weiser。)

他们在某些条件下使其工作有些问题。他们在一个线程中创建对象,并从另一个线程删除指针。

+0

[TR1](http://en.wikipedia.org/wiki/C%2B%2B_Technical_Report_1)是否包括在内? – sarnold 2011-02-23 09:49:35

+1

@kotlinski请不要打扰你不知道的技术。我从来没有使用过Managed C++,但它的后继者 - C++/CLI是.NET生态系统的重要组成部分。 – 2011-02-23 10:43:46

+0

对不起,我不知道它是生态系统的一部分。 – 2011-02-23 10:46:25

回答

17

托管C++(及其后继C++/CLI)当然使用.NET垃圾回收来管理资源(虽然本机资源不是垃圾回收,必须像本地C++一样手动管理)。默认情况下,原生C++没有这种东西(最接近这个的是智能指针,但这仍然是完全不同的东西),但这并不妨碍您编写自己的垃圾回收解决方案(或使用third party solution) 。

+3

C++ 0x明确允许实现包含垃圾回收器。 – 2011-02-23 09:50:04

9

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

  • GCC套件为垃圾收集提供Boehm-GC。
  • 托管C++是Microsoft向C++发布的扩展,它使用.Net 1.0扩展了C++的垃圾收集功能。
  • 还有微软发布的.Net 2的C++/CIL,它弃用了托管C++和更多.Net中心特性。
  • Sun提供了libgc作为C/C++的垃圾回收器。
+0

确实很有趣 – 2011-02-23 10:06:11

0

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

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