Pointers 垃圾引用和悬挂引用之间有什么区别?

Pointers 垃圾引用和悬挂引用之间有什么区别?,pointers,memory-management,reference,garbage,Pointers,Memory Management,Reference,Garbage,垃圾引用和悬挂引用之间有什么区别?悬挂引用是对不再存在的对象的引用。垃圾是无法通过引用访问的对象 挂起引用在垃圾收集语言中不存在,因为只有当对象不再可访问时才会回收它们(只收集垃圾)。在某些语言或框架中,您可以使用“弱引用”,因为在收集过程中不考虑它们,所以可以将其挂起 在手动内存管理语言中,如C或C++,你可以遇到一些悬空指针,例如: int * p = new int; delete p; int i = *p; // error, p has been deleted! 悬挂引用是对不

垃圾引用和悬挂引用之间有什么区别?

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

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

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

int * p = new int;
delete p;

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

悬挂引用是对不再存在的对象的引用

什么是垃圾取决于垃圾收集器的实现

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


因此,悬挂引用几乎只在具有手动内存管理的系统中才是一个问题。

悬挂引用:对最初分配但现在取消分配的内存地址的引用

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有一个垃圾收集器。它会及时删除悬空指针和其他垃圾内存