You do not have a copy constructor.
When you click 'a' into the list, it is copied. Since you do not have a copy constructor (to allocate memory for c and copy from old c to new c) c is the same pointer to and instance a in the list.
A destructor for both called, the first will succeed, the second will fail, because memory c points to already freed.
You need a copy constructor.
To find out what happens, add some paths to the constructors and destructors and execute the code.
Binary binary
source share