垃圾和悬挂参考有什么区别?

时间:2011-05-05 15:17:34

标签: pointers memory-management reference garbage

垃圾和悬挂参考之间有什么区别?

3 个答案:

答案 0 :(得分:19)

悬空引用是对不再存在的对象的引用。垃圾是无法通过引用访问的对象。

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

在具有手动内存管理的语言中,例如C或C ++,你可以遇到悬空的指针,例如:

int * p = new int;
delete p;

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

答案 1 :(得分:3)

悬空引用是对不再存在的对象的引用。

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

使用跟踪和引用计数GC时,悬空引用不能存在(除非存在GC实现错误),因为只有那些元素被认为有资格进行没有引用的垃圾收集。

因此,悬空引用几乎只适用于具有手动内存管理的系统。

答案 2 :(得分: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有一个垃圾收集器。它及时删除悬空指针和其他垃圾记忆。