了解 C++ 中的删除

Understanding delete in C++ with

我正在阅读一本 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 指向的内存位置的地址,并且删除会使内存地址无效,那么 return 会不会是错误的x 指向第 3 行释放的内存地址 ?

不对,没错。因为在这里您要为 x.

分配一个新值
x= new int(2);           //line 2

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

delete tmpx;             //line 3

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

return x;                //line 4  

您正在返回 x 的地址,该地址由 new 在此函数中返回。