此代码后_var2为Dangling pointer
。
int* _var = new int(102);
auto _var2 = _var;
delete _var;
我必须删除_var2(delete _var2
)吗?这是不可避免的吗?
答案 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;
}