私が考えているのはA
、 SetVar によって返される右辺値が同一のコピーでClass
あり、同じポインターを共有していることVar
です。しかし、右辺値がそのデコンストラクターを呼び出すと、Class
の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
}
atPOINT A
*Val
は 8 に等しいが、 atは にPOINT B
*Val
等しい-17891602
。2回削除しようとしたため、_BLOCK_TYPE_IS_VALID(pHead->nHeadUse)も取得Val
します。
デコンストラクターを削除すると問題は解決しますが、メモリ リークが発生します。