The "#4" rule is possibly being over-cautious, but the point is that "delete this" does not play nicely with a lot of techniques that are often used to give assurances that subsequent code is safe/bugfree/etc.
To understand "#4" picture a circumstance where a programmer has turned on debugging output while trying to find the cause of a spurious crash.
He or she comes across code like this .....
Code:
if (debugging)
std::cerr << " Pointer p is " << (void *)p << '\n';
if (p != NULL)
p->some_member_function();
On examining the output, it will be seen that p results in some (non-zero) address. This is immediately followed by a test that p is not NULL protecting the call of the member function. Ergo, our developer concludes the crash cannot be occurring here.
However, if p has self-destructed ("delete this"), then we have the situation of a programmer assuming code is safe when it is not. A lot of time can be wasted by a developer trying to track down a bug in code that falsely gives reassurance there is no bug.