Delete kann wie jeder andere Methodenaufruf geinlinet werden.
Kannst du nicht wissen. Es kommt hinzu, dass delete diesen Compare sowieso nochmal macht. Damit wird es zu einer statistischen Betrachtung. Wie oft kommt da ein Nullzeiger vor?
Das if kann ja nur dann überhaupt einen Vorteil bringen, wenn der Zeiger tatsächlich Null ist. Die Frage ist also nicht, wieviele Objekte du hast, sondern wieviele du nicht hast.
Was das Nullsetzen nach dem delete angeht, auch darüber kann man geteilter Meinung sein. Sinnvoll ist es, wenn ein Zeiger "recycled" wird, also während seiner Lebenszeit immer wieder mal auf ein Objekt zeigt, zwischendurch aber auch mal nicht.
Bei einem Memberzeiger, mit dem das nicht passiert, ist das IMHO unsinnig. Mit der gleichen Argumentation könnte man int-Member im Destruktor auf 0 setzen - macht doch auch niemand.
Meiner Meinung nach ist der Grund für das Nullsetzen von Zeigern einfach der, dass dieses Konstrukt sehr schön vor Abstürzen durch doppelte deletes schützt. Aber damit verdeckt man IMHO nur ein schlimmeres Problem. Denn wie kann es überhaupt zu einem doppelten delete kommen: Doch nur dadurch, dass man in der Designphase die Lebenszeiten und Besitzverhältnisse der Objekte nicht ordentlich festgehalten hat.
Ich rate von solchen Konstrukten ab, weil sie IMHO schlampiges Design fördern.