Pointers is basically "x bytes from address y is object z". When object get destroyed, memory where he was located is marked as free. But all data still there, so you could try to access it. Sometimes it work, but if memory was allocated again in (*) you rewriting random data of another object, in (**) you are reding random data, wort which could happens it that it prints garbage, but if your print() function were more complex you are risking a crash.