Normalmente, tento definir as coisas de maneira diferente para diferenciar um pouco melhor as duas, mas, de qualquer forma, é uma boa pergunta.
Operador novo é uma função que aloca memória não processada - pelo menos conceitualmente, não é muito diferente malloc()
. Embora seja bastante incomum, a menos que você esteja escrevendo algo como seu próprio contêiner, você pode chamar o operador novo diretamente, como:
char *x = static_cast<char *>(operator new(100));
Também é possível sobrecarregar o operador novo globalmente ou para uma classe específica. IIRC, a assinatura é:
void *operator new(size_t);
Obviamente, se você sobrecarregar um operador novo (global ou para uma classe), também precisará / precisará sobrecarregar o operador correspondente. Pelo que vale, há também um operador separado novo [] usado para alocar memória para matrizes - mas é quase certo que você ignore completamente toda essa bagunça.
O novo operador é o que você normalmente usa para criar um objeto a partir da loja gratuita:
my_class *x = new my_class(0);
A diferença entre os dois é que o operador new apenas aloca memória não processada, nada mais. O novo operador começa usando o operador new para alocar memória, mas, em seguida, chama o construtor para o tipo certo de objeto, portanto, o resultado é um objeto ativo real criado nessa memória. Se esse objeto contiver outros objetos (incorporados ou como classes base), esses construtores também serão chamados.