c++中删除悬空指针

Delete dangling pointer in C++

本文关键字:空指针 删除 c++      更新时间:2023-10-16

此代码后_var2为Dangling pointer

int* _var = new int(102);
auto _var2 = _var;
delete _var;

必须删除_var2 (delete _var2)吗?这是不可避免的吗?

不可以,因为它已经被删除了。

delete关键字并没有真正删除指针,它删除了指向的值。在本例中,您在堆上第1行分配整数102,然后在第3行删除该整数。你的指针(_var_var2)仍然保持整数的地址,但它不再存在了。delete _var2将是不正确的,因为没有在该地址分配任何内容。

我建议您使用from "std::tr1::shared_ptr"来管理资源。
在Scott Meyers第3章的"effective c++"中有关于它的有用信息。

通常情况下,您不需要这样做,因为it点已经被删除了。如果需要使用指针,最好在删除指针后将其设置为NULL:

int* _var = new int(102);
auto _var2 = _var;
...
if(!!_var)
{
delete _var;
_var = NULL;
}