理解C+中的delete+;具有 我有一个C++代码片段,我正在阅读。< /P> 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 }

理解C+中的delete+;具有 我有一个C++代码片段,我正在阅读。< /P> 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 },c++,operator-overloading,dynamic-memory-allocation,C++,Operator Overloading,Dynamic Memory Allocation,我的疑问是,如果我删除第3行上的tmpx,它保存着x指向的内存位置的地址,并且删除会使内存地址无效,那么返回指向在第3行释放的内存地址的x不是错误的吗?不,是正确的。因为这里您正在为x分配一个新值 x= new int(2); //line 2 delete tmpx; //line 3 所以现在tmpx和x指向不同的地方tmpx指向旧的x x= new int(2); //line 2 delete tmpx;

我的疑问是,如果我删除第3行上的tmpx,它保存着x指向的内存位置的地址,并且删除会使内存地址无效,那么返回指向在第3行释放的内存地址的x不是错误的吗?

不,是正确的。因为这里您正在为
x
分配一个新值

x= new int(2);           //line 2
delete tmpx;             //line 3
所以现在
tmpx
x
指向不同的地方
tmpx
指向旧的
x

x= new int(2);           //line 2
delete tmpx;             //line 3
这里您正在删除
tmpx
,它不会影响
x
,现在它指向新位置

return x;                //line 4  

您正在返回此函数中由
new
返回的
x
的地址。

您缺少第2行。不,
x
指向第2行中分配的新数组,而在第3行中,删除了通过
x
传递给函数的另一个对象(但您现在在编辑中删除了第2行。为什么?)代码只做了
删除x;返回新的int(2)没有任何错误检查代码只会让人困惑,应该简化为它所做的,或者扩展为包含检查。这是一个非常奇怪的
操作符=
实现。对于一个不使用
rhs
的函数,不清楚为什么它需要两个参数,实际上
operator=
只能作为成员函数实现。如果这不是一个“不要做”的例子,我建议你找一个不同的例子book@harper是的,确实如此——如果
newint
抛出(当然,对于类来说,抛出的可能性更大),那么您的版本将保留原始的
x
悬空。