共享指针(例如 boost::shared_ptr 或新的 std::shared_ptr)和垃圾回收方法(例如用 Java 或 C# 实现的方法)之间有什么区别?按照我的理解,共享指针会跟踪变量指向资源的次数,并在计数达到零时自动销毁资源。然而,我的理解是,垃圾收集器也管理内存资源,但需要额外的资源来确定对象是否仍在被引用,并且不一定立即破坏资源。
我的假设正确吗?使用垃圾收集器和共享指针之间还有其他区别吗?另外,如果有人执行类似的任务但性能指标不同,为什么他们会使用垃圾收集器而不是共享指针?
最佳答案
正如您所指出的,主要区别在于资源何时被释放/销毁。
GC 可能派上用场的一个优势是,如果您拥有需要很长时间才能释放的资源。对于较短的程序生命周期,最好让资源悬空并最终清理它们。如果达到资源限制,则 GC 可以采取行动释放其中的一些资源。另一方面,一旦引用计数为零,共享指针就会释放其资源。对于具有昂贵时间要求的资源的频繁获取-释放周期来说,这可能成本高昂。
另一方面,在某些垃圾收集实现中,垃圾收集要求整个程序在检查、移动和释放内存时暂停其执行。有更智能的实现,但没有一个是完美的。
关于pointers - 垃圾收集与共享指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4663385/