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