new和malloc区别
new
和 malloc
都是用于在 heap(堆)中分配内存的,但它们之间存在一些重要的区别:- 来源:
new
是 C++ 中的运算符,而malloc
是 C 的函数。
- 构造和析构:
new
不仅分配内存,还会调用对象的构造函数来初始化对象。当使用delete
释放内存时,它还会调用对象的析构函数。而malloc
只是简单地分配一块内存,不会调用任何构造函数或析构函数。
- 类型安全:
new
会返回正确的类型,不需要类型转换。而malloc
返回的是void*
,需要进行类型转换。
- 错误处理:如果
new
无法分配内存(例如,内存不足),它会抛出std::bad_alloc
异常(除非你使用了nothrow
版本的new
,那样的话它会返回nullptr
)。而malloc
在无法分配内存时只会返回NULL
(或nullptr
在 C++ 中)。
- 内存分配大小:
new
会自动计算需要分配的内存大小,而malloc
需要显式地提供字节数。
以下是两者的使用示例:
使用
new
:使用
malloc
:- 作者:Olimi
- 链接:https://olimi.icu/48eeb201646d4d20b2e4d040731e1a61
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。