gpt4 book ai didi

c++ - 为什么在 RAII 可用时进行垃圾收集?

转载 作者:IT老高 更新时间:2023-10-28 14:01:56 27 4
gpt4 key购买 nike

我听说 C++14 在 C++ 标准库本身中引入了垃圾收集器。此功能背后的基本原理是什么?这不是 RAII 存在于 C++ 中的原因吗?

  • 标准库垃圾收集器的存在将如何影响 RAII 语义?
  • 这对我(程序员)或我编写 C++ 程序的方式有什么影响?

最佳答案

垃圾收集和 RAII 在不同的上下文中很有用。 GC 的存在不应影响您对 RAII 的使用。由于 RAII 是众所周知的,所以我举两个 GC 很方便的例子。


垃圾收集对实现无锁数据结构有很大帮助。

[...] it turns out that deterministic memory freeing is quite a fundamental problem in lock-free data structures. (from Lock-Free Data Structures By Andrei Alexandrescu)

基本上,问题是您必须确保在线程读取内存时不会释放内存。这就是 GC 派上用场的地方:它可以查看线程并仅在安全时进行释放。详情请阅读文章。

在这里要明确一点:这并不意味着 WHOLE WORLD 应该像在 Java 中那样被垃圾收集;只有相关数据应该被准确地垃圾收集。


在他的一个演讲中,Bjarne Stroustrup 还提供了一个很好的、有效的例子,说明 GC 变得很方便。想象一个用 C/C++ 编写的应用程序,大小为 10M SLOC。该应用程序运行良好(相当无错误),但它会泄漏。您既没有资源(工时)也没有解决此问题的功能知识。源代码是一个有点凌乱的遗留代码。你做什么工作?我同意这可能是用 GC 解决问题的最简单和最便宜的方法。


正如 sasha.sochka 所指出的那样,垃圾收集器将是可选的

我个人担心的是人们会像在 Java 中一样开始使用 GC,并且会编写草率的代码和垃圾收集所有东西。 (我的印象是 shared_ptr 已经成为默认的“转到”,即使在 unique_ptr 或者, hell ,堆栈分配可以做到这一点的情况下。)

关于c++ - 为什么在 RAII 可用时进行垃圾收集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17261912/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com