Di solito provo a formulare le cose in modo diverso per differenziarle un po 'meglio, ma in ogni caso è una buona domanda.
L'operatore new è una funzione che alloca memoria non elaborata, almeno concettualmente, non è molto diverso da malloc(). Sebbene sia abbastanza insolito a meno che tu non stia scrivendo qualcosa come il tuo contenitore, puoi chiamare l'operatore new direttamente, come:
char *x = static_cast<char *>(operator new(100));
È anche possibile sovraccaricare l'operatore new globalmente o per una classe specifica. IIRC, la firma è:
void *operator new(size_t);
Ovviamente, se sovraccarichi un operatore new (globale o per una classe), vorrai / dovrai anche sovraccaricare anche l'operatore corrispondente delete. Per quel che vale, c'è anche un operatore separato new [] che viene utilizzato per allocare la memoria per gli array, ma quasi certamente faresti meglio a ignorare completamente tutto quel casino.
Il nuovo operatore è quello che usi normalmente per creare un oggetto dal negozio gratuito:
my_class *x = new my_class(0);
La differenza tra i due è che l'operatore new alloca solo la memoria non elaborata, nient'altro. Il nuovo operatore inizia usando l'operatore new per allocare la memoria, ma poi richiama il costruttore per il giusto tipo di oggetto, quindi il risultato è un vero oggetto live creato in quella memoria. Se quell'oggetto contiene altri oggetti (incorporati o come classi base) anche quei costruttori vengono richiamati.