我之所以问这个问题,首先是因为垃圾收集的优点。我问这个的主要原因是我知道 Bjarne Stroustrup 说过 C++ 将在某个时间点有一个垃圾收集器。
说了这么多,怎么还没加呢?已经有一些用于 C 的垃圾收集器。这只是那些“说起来容易做起来难”的事情之一吗?还是有其他原因没有添加(并且不会在 C11 中添加)?
交叉链接:
澄清一下,我理解 C++ 在首次创建时没有垃圾收集器的原因。我想知道为什么无法添加收集器。
可以添加隐式垃圾收集,但它没有成功。可能不仅是由于实施的复杂性,还因为人们无法足够快地达成普遍共识。
Bjarne Stroustrup 本人的一句话:
我曾希望可以选择启用的垃圾收集器将成为 C0x 的一部分,但是有足够的技术问题,我只需要详细说明这种收集器如何与语言的其余部分集成即可,如果提供。与基本上所有 C0x 功能的情况一样,存在实验性实现。
有一个很好的讨论主题here。
总体概述:
C++ 非常强大,几乎可以让你做任何事情。出于这个原因,它不会自动将许多可能影响性能的东西推给您。垃圾收集可以很容易地用智能指针(用引用计数包装指针的对象,当引用计数达到 0 时自动删除自己)实现。
C 在构建时考虑了没有垃圾收集的竞争对手。与 C 和其他语言相比,效率是 C 必须抵御批评的主要问题。
有两种类型的垃圾收集…
显式垃圾收集:
C++0x 通过 shared_ptr 创建的指针进行垃圾收集
如果你想要它,你可以使用它,如果你不想要它,你不会被迫使用它。
对于 C++0x 之前的版本, boost:shared_ptr 存在并用于相同目的。
隐式垃圾回收:
虽然它没有透明的垃圾收集。不过,它将成为未来 C++ 规范的焦点。
为什么 Tr1 没有隐式垃圾回收?
C++0x 的 tr1 应该有很多东西,Bjarne Stroustrup 在之前的采访中表示 tr1 没有他想要的那么多。