我认为发生的是ASetVar 返回的右值是相同的副本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) 。
删除解构函数可以解决问题,但会造成内存泄漏。