сравнение Таблицы функций:
Feature | new/delete | malloc/free
--------------------------+--------------------------------+-------------------------------
Memory allocated from | 'Free Store' | 'Heap'
Returns | Fully typed pointer | void*
On failure | Throws (never returns NULL) | Returns NULL
Required size | Calculated by compiler | Must be specified in bytes
Handling arrays | Has an explicit version | Requires manual calculations
Reallocating | Not handled intuitively | Simple (no copy constructor)
Call of reverse | Implementation defined | No
Low memory cases | Can add a new memory allocator | Not handled by user code
Overridable | Yes | No
Use of (con-)/destructor | Yes | No
Технически память, выделенная новым, прибывает из 'Свободного Хранилища', в то время как память, выделенная malloc, прибывает из '"кучи"'. Является ли этими двумя областями то же, реализация детали, который является другой причиной, что malloc и новый не может быть смешан.
new
и delete
C++ примитивы , которые объявляют новый экземпляр класса или удаляют его (таким образом вызов деструктора класса для экземпляра).
malloc
и free
функции C , и они выделяют и блоки свободной памяти (в размере).
Оба используют "кучу" для создания выделения. malloc
и free
, тем не менее, больше "низкого уровня", поскольку они просто резервируют блок пространства памяти, которое будет, вероятно, связано с указателем. Никакие структуры не создаются вокруг той памяти (если Вы не полагаете, что массив C структура).
также,
глобальные новые и удаляют, может быть переопределен, malloc/free не может.
дальнейший более новый и удаляют, может быть переопределен на тип.
Единственные общие черты - то, что malloc
/ new
и возвратите указатель, который обращается к некоторой памяти на "куче", и они оба гарантируют, что, как только такой блок памяти был возвращен, это не будет возвращено снова, если Вы не освободите/удалите его сначала. Таким образом, они оба "выделяют" память.
Однако new
/ delete
выполняют произвольную другую работу, кроме того, через конструкторов, деструкторы и перегрузку оператора. malloc
/ free
только когда-либо выделяют и свободная память.
На самом деле, new
достаточно настраиваемо, что это не обязательно возвращает память из "кучи", или даже выделяет память вообще. Однако значение по умолчанию new
делает.
new
/ delete
C++, malloc
/ free
прибывает из старого доброго C.
В C++, new
вызовы конструктор объектов и delete
вызовы деструктор.
malloc
и free
, прибывая со средневековья перед OO, только выделяют и освобождают память, не выполняя кода объекта.
В C++ new
/ delete
вызывают Конструктора/Деструктор соответственно.
malloc
/ free
просто выделяют память от "кучи". new
/ delete
выделяют память также.
new
вызовы ctor объекта, delete
называют dtor.
malloc
& free
просто выделяют и освобождают необработанную память.
Самое соответствующее различие - то, что new
оператор выделяет память, тогда вызывает конструктора, и delete
вызовы, деструктор тогда освобождает память.