Soweit ich verstehe, ist dies zu ermöglichen, dass neue in Bezug auf malloc implementiert werden, die Anfragen von null Größe erlaubt. Sie können nicht viel mit ihnen tun, da die Dereferenzierung eines solchen Pointers, wie im unten stehenden Zitat erwähnt, ein undefiniertes Verhalten ist.
Wir können eine Begründung im Entwurf der C++ Standard Fußnote 35 finden, die aus dem Abschnitt verwiesen wird 3.7.4.1
[basic.stc.dynamic.allocation]:
[...] Auch wenn die Größe Der angeforderte Speicherplatz ist Null, die Anfrage kann fehlschlagen. Wenn die Anforderung erfolgreich ist, muss der zurückgegebene Wert ein Nicht-Null-Zeigerwert (4.10) p0 sein, der sich von dem zuvor zurückgegebenen Wert p1 unterscheidet, es sei denn, dieser Wert p1 wurde anschließend an einen Operator delete übergeben. Der Effekt der Dereferenzierung eines als Anforderung für die Größe 0 zurückgegebenen Zeigers ist nicht definiert.
und Fußnote 35 sagt:
Die Absicht Operator new() implementierbar durch den Aufruf von std :: malloc zu haben ist() oder std :: calloc(), so sind die Regeln im Wesentlichen das gleiche. C++ unterscheidet sich von C darin, dass eine Nullanforderung erforderlich ist, um einen Nicht-Null-Zeiger zurückzugeben. Abschnitt Standard 7.22.3
Speichermanagementfunktionen
Vom C11 Entwurf:
[...] Wenn die Größe der angeforderte Speicherplatz Null ist, ist das Verhalten implementierungsdefiniert: Entweder wird ein Nullzeiger zurückgegeben, oder das Verhalten ist so, als wäre die Größe ein Wert ungleich Null, außer dass der zurückgegebene Zeiger nicht verwendet werden soll um auf ein Objekt zuzugreifen.
Sie können nicht viel mit ihnen tun. Es ist im Grunde zu erlauben, dass new in Bezug auf malloc implementiert wird, soweit ich weiß. –