Your ultimate intention is not clear Do you merely want working code or are you investigating memory structures created by the compiler As to your example you will have to delete the destination pointer before assigning it a new value else you will have memory leakage as shown here
Move::Move(const Move& source)
{
delete data;
data = new int;
*data = *source.data;
}