在D中,当我有一个指向一个没有引用它的对象的指针时,垃圾收集器会取消分配该对象吗?
int main() {
int[]* testvPtr = test();
// Will testvPtr risk pointing at de-allocated memory?
return 0;
}
int[]* test() {
int[] testv = new int()[5];
return &testv;
}
答案 0 :(得分:3)
您的示例不是有效的D代码。在test()
中,您将返回局部变量的地址,该变量在变量驻留在堆栈上时无效,并且当该函数返回时,包含它的堆栈帧将不再存在。
要回答标题中的问题,GC将以递归方式跟随所有间接,无论它们是指针还是引用,只要您可以访问堆对象(不使用指针算术或其他非 - {{1}这些东西,GC不会释放内存。