malloc
、free
和new
、delete
的区别
malloc
和 free
是C语言中用于动态分配和释放内存的函数,而 new
和 delete
是C++中用于动态分配和释放内存的操作符。
主要区别如下:
-
语法和返回类型:
new:
返回指向已分配并初始化对象的指针。malloc
: 返回指向已分配内存块的指针。这很容易看出来,比如
//new很明显是按int型申请 int * p=new int a[5]; //malloc很明显是按字节申请 int * p=(int*)malloc(sizeof(int)*5);
-
内存分配和释放:
malloc
函数用于分配指定大小的字节空间,并返回一个指向分配内存的指针。需要手动指定要分配的字节数。free
函数用于释放通过malloc
函数分配的内存。需要手动传递要释放的内存指针。new
操作符用于分配指定类型的对象,并返回一个指向分配对象的指针。不需要手动指定要分配的字节数,编译器会根据类型自动计算。delete
操作符用于释放通过new
操作符分配的对象。需要手动传递要释放的对象指针。 -
构造函数和析构函数的调用:
malloc
和free
只分配和释放内存空间,不会调用对象的构造函数和析构函数。new
会在分配对象时调用构造函数来初始化对象。delete
会在释放对象时调用析构函数来清理对象。 -
类型安全:
malloc
和free
是C语言的函数,不具备类型检查和类型安全性。new
和delete
是C++的操作符,具备类型检查和类型安全性。 -
new、delete
可以重载、继承 -
內存分配失败,
new、delete
会抛出异常,malloc、free
只返回空指针
综上所述,C++中推荐使用 new
和 delete
操作符来进行动态内存的分配和释放,因为它们提供了更好的类型安全性和自动调用构造函数和析构函数的功能。