0

在此代码之后 _var2 是Dangling pointer.

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

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

4

3 回答 3

4

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

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

于 2014-08-16T07:30:12.943 回答
1

我向您推荐使用 from "std::tr1::shared_ptr" 来管理资源。
Scott Meyers 在第 3 章的“有效 c++”中提供了有关它的有用信息。

于 2014-08-16T07:57:35.660 回答
0

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

int* _var = new int(102);
auto _var2 = _var;
...
if(!!_var)
{
delete _var;
_var = NULL;
}
于 2014-08-16T07:31:10.640 回答