The definition of new in the <new> header is:
void* operator new(size_t);
And the definition of malloc is as stated:
void* malloc(size_t);
Now, as C++ is a strongly typed language, it requires a cast from the programmer to convert a void* pointer to the type the programmer requires... In malloc, we have to perform a cast, but not in new, though both return a void* pointer. Why?