This is Undefined Behaviour. When you do something against the rules of the language, your program can do anything at all.
C++ (and other languages, notably C) have Undefined Behaviour because it allows compilers to come up with the most efficient implementations on a particular hardware+os combination. Why should the compiler pay the cost of checking this memory every time to give consistent behaviour in this case, when it is useless to be accessing the memory at this point anyway?
Sometimes it might appear to work, sometimes it might crash, sometimes it might set your socks on fire. Not very likely, but completely legal by the rules of the language.
In this particular case, using that memory after it is deleted is not allowed by the language. It just so happens that the system hasn't yet done anything to blank out that memory, or make it inaccessible to your program. That doesn't mean this behaviour is in any way guaranteed, however. The other likely result is a segmentation fault, if the system does make that memory inaccessible. But again, no guarantees.
You can read about other Undefined Behaviour in C++ here.
You should also consider getting a good C++ book, that will teach you to avoid these sorts of mistakes.