Por lo general, trato de expresar las cosas de manera diferente para diferenciar entre los dos un poco mejor, pero en cualquier caso es una buena pregunta.
Operador nuevo es una función que asigna memoria en bruto, al menos conceptualmente, no es muy diferente de malloc(). Aunque es bastante inusual a menos que esté escribiendo algo como su propio contenedor, puede llamar al operador nuevo directamente, como:
char *x = static_cast<char *>(operator new(100));
También es posible sobrecargar un operador nuevo globalmente o para una clase específica. IIRC, la firma es:
void *operator new(size_t);
Por supuesto, si sobrecarga un operador nuevo (ya sea global o para una clase), también querrá / necesitará sobrecargar también la eliminación del operador coincidente. Para lo que vale, también hay un operador nuevo [] que se usa para asignar memoria a las matrices, pero es casi seguro que ignore todo ese desastre por completo.
El nuevo operador es lo que normalmente usa para crear un objeto desde la tienda gratuita:
my_class *x = new my_class(0);
La diferencia entre los dos es que el operador new solo asigna memoria en bruto, nada más. El nuevo operador comienza utilizando el operador new para asignar memoria, pero luego invoca al constructor para el tipo correcto de objeto, por lo que el resultado es un objeto vivo real creado en esa memoria. Si ese objeto contiene cualquier otro objeto (ya sea incrustado o como clases base), esos constructores también se invocan.