What i think is occuring is that the rvalue A
returned by SetVar is an identical copy to Class
and shares the same pointer Var
. but when the rvalue calls its deconstructor it deletes 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
}
At POINT A
*Val
equals 8, but at POINT B
*Val
equals -17891602
. I also Get _BLOCK_TYPE_IS_VALID(pHead->nHeadUse) due to trying to delete Val
twice.
deleting the deconstructor solves the issue but creates a memory leak.