当我有一个指向变量但不是引用的指针时,垃圾收集器会取消分配它吗?

时间:2014-02-12 19:55:44

标签: pointers garbage-collection d

在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;
}

1 个答案:

答案 0 :(得分:3)

您的示例不是有效的D代码。在test()中,您将返回局部变量的地址,该变量在变量驻留在堆栈上时无效,并且当该函数返回时,包含它的堆栈帧将不再存在。

要回答标题中的问题,GC将以递归方式跟随所有间接,无论它们是指针还是引用,只要您可以访问堆对象(不使用指针算术或其他非 - {{1}这些东西,GC不会释放内存。