В чем разница между new / delete и malloc / free? - PullRequest
274 голосов
/ 27 октября 2008

В чем разница между new / delete и malloc / free?

Похожие (дубликаты?): В каких случаях я использую malloc против new?

Ответы [ 15 ]

2 голосов
/ 19 декабря 2015
  • оператор new, тогда как malloc () - это функция.
  • new возвращает точный тип данных, тогда как malloc () возвращает void * (указатель типа void).
  • malloc (), память не инициализируется и значение по умолчанию является мусором, тогда как в случае нового память инициализируется со значением по умолчанию, например, с 'zero (0)' в случае с int.
  • delete и free () могут быть использованы для указателей NULL.
2 голосов
/ 10 сентября 2015

new и delete являются операторами в c ++; которые тоже могут быть перегружены. malloc и free являются функциями в c;

malloc возвращает ноль ptr, если произошел сбой, а исключение new throws.

адрес, возвращаемый malloc, должен быть снова приведен к типу, так как он возвращает (void *) malloc (size) Новый возврат набранного указателя.

1 голос
/ 19 июня 2015
  • Чтобы использовать malloc(), нам нужно включить <stdlib.h> или <alloc.h> в программе, которая не требуется для new.
  • new и delete могут быть перегружены, но malloc не может.
  • Используя размещение new, мы можем передать адрес, на который мы хотим выделить память, но это невозможно в случае malloc.
0 голосов
/ 12 ноября 2017

Этот код используется для удаления ключевого слова или бесплатной функции. Но когда создать указатель объекта с помощью 'malloc' или 'new' и освобождение памяти объекта с помощью удалить даже тот указатель объекта можно вызывать функцию в классе. После что использовать бесплатно вместо удаления, то также работает после свободного заявления, но при использовании обоих, только объект-указатель не может вызвать функцию в классе. код выглядит следующим образом:

#include<iostream>


using namespace std;

class ABC{
public: ABC(){
    cout<<"Hello"<<endl;
  }

  void disp(){
    cout<<"Hi\n";
  }

};

int main(){

ABC* b=(ABC*)malloc(sizeof(ABC));
int* q = new int[20];
ABC *a=new ABC();
b->disp();

cout<<b<<endl;
free(b);
delete b;
//a=NULL;
b->disp();
ABC();
cout<<b;
return 0;
}

вывод:

Hello
Hi
0x2abfef37cc20
0 голосов
/ 15 июля 2017

1.Новый синтаксис проще, чем malloc ()

2.new / delete - оператор, в котором malloc () / free () это функция.

3.new / delete выполняется быстрее, чем malloc () / free (), потому что новый ассемблерный код напрямую вставляется компилятором.

4.Мы можем изменить / удалить новое значение в программе с помощью оператора overlading.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...