我正在阅读一本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行释放的地址?
答案 0 :(得分:7)
不,是的。因为在这里您要为x
分配一个新值。
x= new int(2); //line 2
所以现在tmpx
和x
指向不同的地方。 tmpx
指向旧的x
。
delete tmpx; //line 3
在这里您要删除tmpx
,这不会影响x
,它现在指向新位置。
return x; //line 4
您将返回x
在此函数中返回的new
的地址。