Difference between global non-throwing ::operator new and std::malloc

The main differences, aside from syntax and free vs. delete, are

  1. you can portably replace ::operator new;
  2. malloc comes with realloc, for which new has no equivalent;
  3. new has the concept of a new_handler, for which there is no malloc equivalent.

(Replacing malloc opens up a can of worms. It can be done, but not portably, because it requires knowledge of the linker.)


There are two differences I can think of:

  1. Which function you must use to deallocate the memory, operator delete vs. free().

  2. A C++ program can legally provide its own version of ::operator new and that version is guaranteed to be called by new expressions. It's not possible to override malloc with your own version.