Я обычно пытаюсь сформулировать вещи по-другому, чтобы лучше различить их, но в любом случае это хороший вопрос.
Оператор new - это функция, которая выделяет необработанную память - по крайней мере, концептуально она не сильно отличается от malloc(). Хотя это довольно необычно, если вы не пишете что-то вроде своего собственного контейнера, вы можете напрямую вызвать оператора new, например:
char *x = static_cast<char *>(operator new(100));
Также возможно перегрузить оператор new либо глобально, либо для определенного класса. IIRC, подпись:
void *operator new(size_t);
Конечно, если вы перегружаете оператор new (глобальный или для класса), вы также захотите / должны перегрузить соответствующий оператор delete. Как бы то ни было, есть также отдельный оператор new [], который используется для выделения памяти для массивов - но вам почти наверняка лучше полностью игнорировать весь этот беспорядок.
Оператор new - это то, что вы обычно используете для создания объекта из бесплатного хранилища:
my_class *x = new my_class(0);
Разница между ними в том, что оператор new просто выделяет необработанную память и ничего больше. Оператор new начинается с использования оператора new для выделения памяти, но затем он вызывает конструктор для объекта правильного типа, поэтому результатом является реальный живой объект, созданный в этой памяти. Если этот объект содержит какие-либо другие объекты (встроенные или как базовые классы), эти конструкторы также вызываются.