在C ++中删除悬空指针

时间:2014-08-16 07:26:07

标签: c++ pointers dangling-pointer

此代码后_var2为Dangling pointer

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

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

3 个答案:

答案 0 :(得分:4)

不,因为它已被删除。

delete关键字并未真正删除指针,它会删除指向的值。在这种情况下,您在第1行的堆上分配整数102,然后在第3行删除该整数。您的指针(_var_var2)仍然保存整数<的地址em>是,但它不再存在了。 delete _var2会不正确,因为该地址没有分配任何内容。

答案 1 :(得分:1)

我建议您使用“std :: tr1 :: shared_ptr”来管理资源 Scott Meyers在第3章的“有效的c ++”中提供了有用的信息。

答案 2 :(得分:0)

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

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