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行获释?
不,这是对的.因为在这里你要分配一个新值x.
x= new int(2); //line 2
Run Code Online (Sandbox Code Playgroud)
所以,现在tmpx并x指向不同的地方.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在此功能.