Output :
in constructor
a =10
in destructor
a =10
in destructor <--------

The marked line is a clue. The destructor is called automatically when you delete the object, but calling the destructor itself does not free the object.

Also depending on the implementation, destroying an object might not actually change the contents of RAM. So you could access memory after it has been freed, but not reliably because this memory is then available for other code to allocate.