2011-01-24 104 views
7

Java中的C++智能指针有什么问题吗?Java中是否有“智能指针”?

+0

我认为你可能会混淆那里的东西。智能指针是一个包含原始指针的包装,引用计数或边界检查。 Java没有原始指针,并且内置了GC。 – delnan 2011-01-24 15:21:04

+0

请参阅Wikipedia对智能指针的解释以获取更多信息:http://en.wikipedia.org/wiki/Smart_pointer – 2011-01-24 15:21:48

+1

语言实现本身(JVM)占据了大部分(如果不是全部)通常由C++中的智能指针处理的作业。 – 2011-01-24 15:23:25

回答

12

所有的Java'指针'(引用)都是智能指针。

Java在托管环境中运行。这意味着Java使用垃圾收集器来清理不再被引用的变量。

虽然Java的引用与指针稍有不同。 Java会将您在C++中看到的所有指针值和数学抽象出来。因此,无论何时您创建一个新对象并将其存储到一个变量中,您都将其存储到Java的'智能指针'版本中。

3

不,在Java中没有任何类的指针。一般来说,无论如何,你不需要智能指针,因为你已经有了一个垃圾回收器来做自动管理内存分配/释放周期的引用计数。

5

是的,没有。没有,Java中不存在像指针对象那样的东西。是的,每个对象都是一个“智能指针”,这意味着它被垃圾收集和照顾自己的一生。

6

我只听说过内存管理环境中的智能指针。由于内存管理是Java平台的核心,显然没有必要这样做。

想到最接近的匹配是java.lang.ref.WeakReference和java.lang.ref.SoftReference,因为它们允许在一定程度上自定义垃圾回收。