垃圾引用和悬空引用有什么区别?

12

垃圾引用和悬空引用有什么区别?

3个回答

26

悬空引用是指指向已经不存在的对象的引用。垃圾对象是指通过引用无法访问到的对象。

在垃圾回收语言中,不存在悬空引用,因为只有当对象不再可访问(只有垃圾被回收)时才回收对象。在某些语言或框架中,您可以使用“弱引用”,这些引用可能会悬空,因为它们在收集过程中不会被考虑到。

在需要手动管理内存的语言,如C或C ++中,你可能会遇到悬空指针,例如当进行以下操作时:

int * p = new int;
delete p;

int i = *p; // error, p has been deleted!

3

悬空引用是指引用一个不存在的对象。

什么被视为垃圾取决于您的垃圾收集器的实现。

使用跟踪和引用计数GC,除非存在GC实现错误,否则不能存在悬空引用,因为只有那些没有引用的元素被视为可进行垃圾回收。

因此,悬空引用几乎只对具有手动内存管理系统的系统构成问题。


0
悬空引用:对最初分配但现在已释放的内存地址的引用。
int x= 1000;   //creates a new 
memory block
int* p = x;   // *p is the pointer to address block 1000(mem location) 
int *p = 20;
printf("%d",*p); //This pointer prints 20 
delete p; 
printf("%d",*p); // This would throw an error, because now p is 
                 // inaccessible or dangling. *p is a dangling pointer.

垃圾:在堆上分配的内存,尚未被显式释放,但程序无法访问。 Java具有垃圾收集器。它及时清除悬空指针和其他垃圾内存。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接