在 C++ 中,new
/delete
和 malloc
/free
都用于动态内存管理,但它们有显著的区别:
1. new
和 malloc
的区别
- 语言:
new
是 C++ 的运算符。malloc
是 C 标准库函数。
- 内存分配:
new
不仅分配内存,还会调用对象的构造函数。malloc
只分配内存,不调用构造函数。
- 返回类型:
new
返回特定类型的指针。malloc
返回void*
,需要显式类型转换。
- 内存大小:
new
自动计算所需内存大小。malloc
需要手动指定内存大小。
- 失败处理:
new
在失败时抛出std::bad_alloc
异常。malloc
在失败时返回NULL
。
- 重载:
new
可以重载。malloc
不能重载。
2. delete
和 free
的区别
- 语言:
delete
是 C++ 的运算符。free
是 C 标准库函数。
- 内存释放:
delete
不仅释放内存,还会调用对象的析构函数。free
只释放内存,不调用析构函数。
- 指针类型:
delete
用于释放由new
分配的指针。free
用于释放由malloc
分配的指针。
- 数组处理:
delete[]
用于释放数组。free
不区分数组和单个对象。
总结
new
/delete
:适用于 C++,自动管理构造和析构,类型安全,支持重载。malloc
/free
:适用于 C,手动管理内存,不调用构造和析构函数,需要类型转换。
在 C++ 中,推荐使用 new
和 delete
,因为它们更安全且符合面向对象的设计。
THE END
暂无评论内容