了解 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
所以现在 tmpx
和 x
指向不同的地方。 tmpx
指向旧的 x
.
delete tmpx; //line 3
此处您要删除 tmpx
,这不会影响 x
,它现在指向新位置。
return x; //line 4
您正在返回 x
的地址,该地址由 new
在此函数中返回。
我正在阅读一本 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
所以现在 tmpx
和 x
指向不同的地方。 tmpx
指向旧的 x
.
delete tmpx; //line 3
此处您要删除 tmpx
,这不会影响 x
,它现在指向新位置。
return x; //line 4
您正在返回 x
的地址,该地址由 new
在此函数中返回。