J'essaie généralement de formuler les choses différemment pour différencier un peu mieux les deux, mais c'est une bonne question dans tous les cas.
Operator new est une fonction qui alloue de la mémoire brute - du moins conceptuellement, ce n'est pas très différent de malloc(). Bien que ce soit assez inhabituel à moins que vous n'écriviez quelque chose comme votre propre conteneur, vous pouvez appeler l'opérateur new directement, comme:
char *x = static_cast<char *>(operator new(100));
Il est également possible de surcharger l'opérateur new soit globalement, soit pour une classe spécifique. IIRC, la signature est:
void *operator new(size_t);
Bien sûr, si vous surchargez un opérateur new (global ou pour une classe), vous voudrez / devrez également surcharger l'opérateur correspondant delete. Pour ce que ça vaut, il y a aussi un opérateur séparé new [] qui est utilisé pour allouer de la mémoire aux tableaux - mais il vaut certainement mieux ignorer complètement tout ce désordre.
Le nouvel opérateur est ce que vous utilisez normalement pour créer un objet à partir du magasin gratuit:
my_class *x = new my_class(0);
La différence entre les deux est que l'opérateur new alloue simplement de la mémoire brute, rien d'autre. L'opérateur new commence par utiliser l'opérateur new pour allouer de la mémoire, mais il appelle ensuite le constructeur pour le bon type d'objet, le résultat est donc un véritable objet vivant créé dans cette mémoire. Si cet objet contient d'autres objets (incorporés ou en tant que classes de base), ces constructeurs sont également appelés.