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 操作符来进行动态内存的分配和释放,因为它们提供了更好的类型安全性和自动调用构造函数和析构函数的功能。

本文对比了C和C++中malloc/free与new/delete在内存分配、返回类型、内存释放、构造析构函数调用以及类型安全性的差异,强调C++中new/delete的推荐使用原因。
449

被折叠的 条评论
为什么被折叠?



