我认为发生的是A
SetVar 返回的右值是相同的副本Class
并共享相同的指针Var
。但是当右值调用它的解构函数时,它会删除Class
's Val
。
class A
{
private:
int* Var;
public:
A SetVar(int);
~A()
{
delete Var;
}
};
A A::SetVar(int NewVar)
{
Var=new int;
*Var=NewVar;
//POINT A
return *this;
}
int main()
{
A Class;
Class.SetVar(8);
//POINT B
}
等于8 POINT A
*Val
,但POINT B
*Val
等于-17891602
。由于尝试删除Val
两次,我还得到 _BLOCK_TYPE_IS_VALID(pHead->nHeadUse) 。
删除解构函数可以解决问题,但会造成内存泄漏。