Zwykle staram się ująć to w inny sposób, aby nieco lepiej rozróżnić te dwa elementy, ale w każdym razie to dobre pytanie.
Operator new to funkcja alokująca pamięć surową - przynajmniej koncepcyjnie niewiele się od niej różni malloc(). Chociaż jest to dość niezwykłe, chyba że piszesz coś w rodzaju własnego kontenera, możesz bezpośrednio zadzwonić do operatora nowego, na przykład:
char *x = static_cast<char *>(operator new(100));
Możliwe jest również przeciążenie operatora new globalnie lub dla określonej klasy. IIRC, podpis:
void *operator new(size_t);
Oczywiście, jeśli przeciążasz operator new (globalny lub dla klasy), będziesz również chciał / musiał przeciążać również dopasowany operator delete. Co jest warte, istnieje również oddzielny operator new [], który służy do przydzielania pamięci dla tablic - ale prawie na pewno lepiej jest całkowicie zignorować ten cały bałagan.
Nowy operator jest tym, czego zwykle używasz do tworzenia obiektu z darmowego sklepu:
my_class *x = new my_class(0);
Różnica między nimi polega na tym, że operator new po prostu przydziela nieprzetworzoną pamięć, nic więcej. Operator new zaczyna od użycia operatora new do alokacji pamięci, ale następnie wywołuje konstruktor dla odpowiedniego typu obiektu, więc wynikiem jest prawdziwy, żywy obiekt utworzony w tej pamięci. Jeśli ten obiekt zawiera inne obiekty (osadzone lub jako klasy bazowe), te konstruktory również są wywoływane.