| malloc/free | new/delete |
|---|---|
| 是函数 | 是操作符 |
| malloc申请空间时需要手动计算大小并传递 | new 只需要跟上类型就行 |
| 申请到的空间是 void* 需要强制类型转换为所需类型 | 不需要,new 后面跟着数据类型 |
| 动态申请的空间需要判空之后才能使用 | 一般都会申请成功,内部是一个while循环对malloc的封装,内存不足,需要捕捉异常 |
| malloc申请的空间不能初始化 | new申请的空间可以 |
| malloc可以申请内置类型或者自定义类型,但不会初始化,因为没有构造函数 | new申请空间之后会自动调用构造函数 |
| free不会调用构造函数 | delete 先调用析构函数,再释放空间 |
free函数如果是:
free(NULL);
不会出错!!!!
本文详细对比了C++中new/delete操作符与C语言中malloc/free函数在动态内存管理上的区别。从内存申请、类型转换、初始化、异常处理到析构函数调用等方面进行了深入分析。
3万+





