С++ имеет несколько функций для приобретения динамического хранилища, большинство из которых отличаются некоторым фундаментальным способом. Несколько других обычно добавляются ОС.
Два из них представляют особый интерес из-за их переносимости и подобия: malloc
и ::operator new
.
Существуют ли различия (w.r.t. стандарт и реализация) между глобальными 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.