在此代码之后 _var2 是Dangling pointer
.
int* _var = new int(102);
auto _var2 = _var;
delete _var;
我必须删除 _var2 ( delete _var2
) 吗?这是不可避免的吗?
在此代码之后 _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 章的“有效 c++”中提供了有关它的有用信息。
更新。通常情况下,您不需要这样做,因为它的点已经被删除了。如果需要使用指针,最好在删除指针后将指针设置为 NULL:
int* _var = new int(102);
auto _var2 = _var;
...
if(!!_var)
{
delete _var;
_var = NULL;
}