Разница между глобальным оператором new и malloc
C ++ имеет несколько функций для получения динамического хранилища, большинство из которых отличаются фундаментальным образом. Еще несколько обычно добавляются ОС.
Два из них представляют особый интерес из-за их портативности и сходства:malloc
а также::operator new
.
Есть ли какие-либо различия (в отношении стандарта и реализации) между глобальнымvoid* operator new(size_t, ::std::nothrow&)
а такжеvoid* malloc(size_t)
?
Поскольку кажется, что я имею в виду некоторую путаницу, рассмотрим следующие два вызова:
void* p = ::std::malloc(10);
void* q = ::operator new(10, ::std::nothrow);
Очевидное и тривиальное отличие состоит в том, как освободить память:
::std::free(p);
::operator delete(q);
Примечание: этот вопрос не является дубликатом, например,В чем разница между new / delete и malloc / free? поскольку речь идет об использованииГлобальный operator new
это фактически не выполняет никаких вызовов ctor.