So to understand new/delete better (really to prove to myself with small examples why virtual destructors are needed for interfaces), I want to understand memory leaks, so that
This code
delete P1; cout<<"P1 = "<
causes undefined-behavior. So anything can happen. It's much easier to cause a memory leak:
for(;;) new int;