gpt4 book ai didi

java - C++:普遍使用 shared_ptr<> 是否等同于 gc?

转载 作者:搜寻专家 更新时间:2023-10-30 21:20:55 26 4
gpt4 key购买 nike

这只是一个学术问题(我永远不会在实际代码中这样做):

如果我要在我的代码中普遍使用 shared_ptr<>,其行为是否等同于像 Java 这样的 gc 收集语言?

如果不是,其行为与 gc 嵌入式语言有何不同?与 gc 嵌入式语言相比,哪种 C++ 构造会产生等效的行为?

注意:在实际编码中,我非常喜欢使用 RAII 和严格所有权,而不是使用任何智能指针。我也知道其他不太通用的指针 unique_ptr<> 会更有效率。这个问题只是对智能指针等价性的查询。

最佳答案

不,有几个重要的区别:

  • 只要有循环引用,就会发生内存泄漏。垃圾收集器可以处理循环,引用计数不能。
  • 您将避免任何停顿或暂停,因为不会发生垃圾收集。另一方面,您可能会花费更多的总 CPU 时间来清理资源,因为偶尔进行垃圾回收的摊销成本非常低,如果对所有内容都进行引用计数,则成本相对较高。

显然第一点是 killer 锏。如果您这样做,您的许多资源将不会被释放,并且您会泄漏内存并且您的应用程序将无法正常运行。

Which C++ construct would yield equivalent behavior compared to a gc-embedded language?

没有。 C++ 没有垃圾收集器,因为没有办法实现正确、可靠的垃圾收集器。 (是的,我知道 Boehm 的 GC,它是一个很好的近似值,但它是保守的,并且不会检测所有引用,只有它可以 100% 确定的引用。没有办法,在一般的 C++ 程序中, 实现一个 Just Works(tm)) 的垃圾收集器

关于java - C++:普遍使用 shared_ptr<> 是否等同于 gc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7858228/

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