The main differences, aside from syntax and free vs. delete, are
- you can portably replace
::operator new; malloccomes withrealloc, for whichnewhas no equivalent;newhas the concept of anew_handler, for which there is nomallocequivalent.
(Replacing malloc opens up a can of worms. It can be done, but not portably, because it requires knowledge of the linker.)