malloc()
/ free()
не обязательно совместим с new
и delete
. new
вполне может вызвать malloc()
(по крайней мере, по умолчанию), но вы не должны на это рассчитывать.
Одно существенное различие между malloc()
и new()
состоит в том, что malloc()
возвращает void*
, который указывает на необработанную память, тогда как new
возвращает типизированный указатель и вызывает конструктор, если таковой имеется (и delete
вызывает деструктор).
Если вы пишете на C ++, очень редко есть веская причина выделять необработанную нетипизированную память.
Но если вы действительно хотите это сделать, вы можете написать что-то вроде:
void *p = (void*)new char[size];