这只是一个学术问题(我永远不会在实际代码中这样做):
如果我要在我的代码中普遍使用 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/