Определение нового в заголовке <new> :
void* operator new(size_t);
И определение malloc как указано:
void* malloc(size_t);
Теперь, когда С++ является строго типизированным языком, для него требуется бросок от программиста, чтобы преобразовать указатель void * в тип, который требуется программисту... В malloc нам нужно выполнить бросок, но не в новом, хотя оба возвращают указатель void *. Почему?