作者:dingzhi521 | 来源:互联网 | 2022-12-02 09:44
我正在阅读我正在阅读的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> Blaze..:
不,这是对的.因为在这里你要分配一个新值x
.
x= new int(2); //line 2
所以,现在tmpx
并x
指向不同的地方.tmpx
指向旧的x
.
delete tmpx; //line 3
在这里你删除tmpx
,这不会影响x
,现在指向新的位置.
return x; //line 4
你的地址返回x
,是由返回new
在此功能.