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

kfm*_*e04 11 c++ java garbage-collection smart-pointers

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

如果我在我的代码中普遍使用shared_ptr <>,那么行为是否等同于Java之类的gc收集语言?

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

注意:在实际编码中,我更倾向于使用RAII和严格的所有权来使用任何智能指针.我也知道其他不太通用的指针,unique_ptr <>会更有效率.这个问题只是对智能指针等价的一个问题.

jal*_*alf 12

不,有几个重要的区别:

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

显然,第一点是杀手.如果你这样做了,你的许多资源都不会被释放,你会泄漏内存而你的应用程序就不会表现得很好.

与gc嵌入式语言相比,哪种C++构造会产生相同的行为?

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

  • 你有没有参考`另一方面,你可能会花费更多的总时间来清理资源.似乎是一个大胆的主张. (2认同)