了解C ++中的删除

时间:2018-10-17 07:47:46

标签: c++

我正在阅读一本C ++书中的以下代码段。

int* operator=(const int& rhs, int *x)
{
   int *tmpx=x              //line 1
   x = new int(2)           //line 2 
   delete tmpx;             //line 3
   return x;                //line 4                   
}

我的疑问是,如果我要删除第3行上的tmpx,该地址将地址保存到x指向的内存位置,而删除将使该内存地址无效,那么返回指向内存的x是不是错误的在第3行释放的地址?

1 个答案:

答案 0 :(得分:7)

不,是的。因为在这里您要为x分配一个新值。

x= new int(2);           //line 2

所以现在tmpxx指向不同的地方。 tmpx指向旧的x

delete tmpx;             //line 3

在这里您要删除tmpx,这不会影响x,它现在指向新位置。

return x;                //line 4  

您将返回x在此函数中返回的new的地址。