Normalerweise versuche ich, die Dinge anders zu formulieren, um die beiden etwas besser zu unterscheiden, aber das ist auf jeden Fall eine gute Frage.
Operator new ist eine Funktion, die Rohspeicher zuweist - zumindest konzeptionell unterscheidet sie sich nicht wesentlich von malloc(). Obwohl es ziemlich ungewöhnlich ist, wenn Sie nicht so etwas wie Ihren eigenen Container schreiben, können Sie den Operator new direkt anrufen, wie zum Beispiel:
char *x = static_cast<char *>(operator new(100));
Es ist auch möglich, Operatoren neu entweder global oder für eine bestimmte Klasse zu überladen. IIRC, die Unterschrift lautet:
void *operator new(size_t);
Wenn Sie einen neuen Operator (entweder global oder für eine Klasse) überladen, möchten / müssen Sie natürlich auch den passenden Operator delete überladen. Für das, was es wert ist, gibt es auch einen separaten Operator new [], der verwendet wird, um Speicher für Arrays zuzuweisen - aber Sie sind mit ziemlicher Sicherheit besser dran, das ganze Durcheinander vollständig zu ignorieren.
Mit dem neuen Operator erstellen Sie normalerweise ein Objekt aus dem freien Speicher:
my_class *x = new my_class(0);
Der Unterschied zwischen den beiden besteht darin, dass der Operator new nur Rohspeicher zuweist, sonst nichts. Der neue Operator verwendet zunächst den Operator new, um Speicher zuzuweisen. Anschließend ruft er den Konstruktor für den richtigen Objekttyp auf, sodass das Ergebnis ein reales Live-Objekt ist, das in diesem Speicher erstellt wurde. Wenn dieses Objekt andere Objekte enthält (entweder eingebettet oder als Basisklassen), werden diese Konstruktoren ebenfalls aufgerufen.