小编典典

为什么 C++ 没有垃圾收集器?

all

我之所以问这个问题,首先是因为垃圾收集的优点。我问这个的主要原因是我知道 Bjarne Stroustrup 说过 C++ 将在某个时间点有一个垃圾收集器。

说了这么多,怎么还没加呢?已经有一些用于 C 的垃圾收集器。这只是那些“说起来容易做起来难”的事情之一吗?还是有其他原因没有添加(并且不会在 C11
中添加)?

交叉链接:

澄清一下,我理解 C++ 在首次创建时没有垃圾收集器的原因。我想知道为什么无法添加收集器。


阅读 82

收藏
2022-04-26

共1个答案

小编典典

可以添加隐式垃圾收集,但它没有成功。可能不仅是由于实施的复杂性,还因为人们无法足够快地达成普遍共识。

Bjarne Stroustrup 本人的一句话:

我曾希望可以选择启用的垃圾收集器将成为 C0x
的一部分,但是有足够的技术问题,我只需要详细说明这种收集器如何与语言的其余部分集成即可,如果提供。与基本上所有 C
0x
功能的情况一样,存在实验性实现。

有一个很好的讨论主题here

总体概述:

C++
非常强大,几乎可以让你做任何事情。出于这个原因,它不会自动将许多可能影响性能的东西推给您。垃圾收集可以很容易地用智能指针(用引用计数包装指针的对象,当引用计数达到
0 时自动删除自己)实现。

C 在构建时考虑了没有垃圾收集的竞争对手。与 C 和其他语言相比,效率是 C 必须抵御批评的主要问题。

有两种类型的垃圾收集…

显式垃圾收集:

C++0x 通过 shared_ptr 创建的指针进行垃圾收集

如果你想要它,你可以使用它,如果你不想要它,你不会被迫使用它。

对于 C++0x 之前的版本, boost:shared_ptr 存在并用于相同目的。

隐式垃圾回收:

虽然它没有透明的垃圾收集。不过,它将成为未来 C++ 规范的焦点。

为什么 Tr1 没有隐式垃圾回收?

C++0x 的 tr1 应该有很多东西,Bjarne Stroustrup 在之前的采访中表示 tr1 没有他想要的那么多。

2022-04-26