用C++理解C++中的删除

dan*_*dhi 2 c++ operator-overloading dynamic-memory-allocation

我正在阅读我正在阅读的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                   
}
Run Code Online (Sandbox Code Playgroud)

我怀疑的是,如果我在第3行删除tmpx,它将地址保存到x指向的内存位置,并且删除将使内存地址无效,那么返回指向内存地址的x不是错误的在第3行获释?

Bla*_*aze 7

不,这是对的.因为在这里你要分配一个新值x.

x= new int(2);           //line 2
Run Code Online (Sandbox Code Playgroud)

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

delete tmpx;             //line 3
Run Code Online (Sandbox Code Playgroud)

在这里你删除tmpx,这不会影响x,现在指向新的位置.

return x;                //line 4  
Run Code Online (Sandbox Code Playgroud)

你的地址返回x,是由返回new在此功能.