After calling the destructor for the object, it's still referencing as
if it is in the memory? why?
Deleting a pointer doesn't zero out any memory because to do so would take CPU cycles and that's not what C++ is about. What you have there is a dangling pointer, and potentially a subtle error ... (Benj answer).
And why do we need to call the destructor explicitly for a dynamically
created object by using delete this?
Calling the destructor manually is required if the object was constructed using an overloaded form of operator new(), except when using the "std::nothrow" overloads... (Dietmar Kühl answer).
If we use delete this; inside destructor what will happen? Is this
making the call to destructor recursively?
As soon as the destructor is called (the first time), the lifetime of the object has ended. Thus, if you call the destructor for the object from within the destructor, the behavior is undefined ... (James McNellis answer).
Please in your future search(es) use the stackoverflow database, most of the time there is already an answer to your question.