c++ - 编写函数来释放指针并将其分配为 NULL

标签 c++ delete-operator dangling-pointer

我在最近的一次采访中被问到这个问题,基本上是写一个函数来结合 free 和分配 null 的功能。我是这样回答的:

void main()
{
      int *ptr;
      ptr = new int;
      ptr = newdelete(ptr);
}

(int*) newdelete (int *ptr)
{
      delete(ptr);
      return NULL;
}

所以在执行之后,main 本地的 ptr 将保存空值,因为我从 newdelete 函数返回它。如果我刚刚在 newdelete 函数中分配了 NULL,则 newdelete 本地的 ptr 将被清空,而不是 ptr main 的本地。

我认为我的解决方案是正确的,面试官也接受了。然而,他期待着其他的答案。他坚持我不要从函数中返回 NULL 并仍然达到预期的结果。

有没有办法做到这一点?我能想到的只是传递另一个参数,它是指向 main 本地指针 ptr 的指针,但我不明白为什么它比我所做的更好!

最佳答案

Is there any way to accomplish that??

template <typename T> void safeDelete(T*& p){
    delete p;
    p = 0;
}

int main(int argc, char** arv){
    int * i = new int;
    safeDelete(i);
    return 0;
}

关于c++ - 编写函数来释放指针并将其分配为 NULL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163839/

相关文章:

c - 返回指向局部变量的指针是UB吗?

c++ - 删除C++中的悬挂指针

c++ - 如何使用 C++ 库函数或 STL 对字符串进行排序?

python - 获取字符串中不同索引数量所需的快速方法

c++ - 删除指针时出错

c++ - delete[] (ptr, 0) 的行为

c - 在这种情况下,char[] 和 char* 有何不同?

c++ - 将带有模板的构造函数实现与头文件分离

c++ - 散列溢出

c++ - 删除动态分配的数组