有人可以向C++程序员解释Java(和C#)引用和shared_ptr(来自Boost或来自C++ 0x)之间最重要的区别.
我或多或少知道如何实现shared_ptr.我很好奇以下几个方面的差异:
1)表现.2)骑自行车.shared_ptr可以循环(A和B保持彼此的指针).在Java中可以骑自行车吗?3)还有别的吗?
谢谢.
性能:shared_ptr性能很好,但根据我的经验,效率比显式内存管理稍低,主要是因为它是引用计数的,并且引用计数也必须分配。它的性能如何取决于很多因素,并且它与 Java/C# 垃圾收集器相比的性能只能根据每个用例来确定(取决于语言实现等因素)。
只能使用进行循环weak_ptr,而不是使用两个shared_ptrs。Java让骑自行车不再费事;它的垃圾收集器会破坏循环。我的猜测是 C# 也会做同样的事情。
其他任何事情shared_ptr:一旦对 a 指向的对象的最后一个引用超出范围,它就会被销毁。析构函数被立即调用。在Java中,终结器可能不会立即被调用。我不知道 C# 在这一点上的表现如何。
| 归档时间: |
|
| 查看次数: |
887 次 |
| 最近记录: |