Toriyung

导航

C/C++:new/delete与malloc/free的区别

`new` 和 `delete` 是 C++ 中的关键字,而 `malloc()` 和 `free()` 是 C 语言中的函数。它们在内存分配和释放方面有几个重要区别:

1. **类型安全性**:
- `new` 和 `delete` 是 C++ 中的运算符,它们会自动计算所需的内存大小,并返回正确类型的指针。这意味着你不需要在使用时显式指定类型。
- `malloc()` 返回 `void*` 类型的指针,你需要显式转换为所需的类型。因此,它不提供类型安全性。

2. **构造函数和析构函数的调用**:
- 当使用 `new` 分配内存时,会调用对象的构造函数来初始化对象。而当使用 `delete` 释放内存时,会调用对象的析构函数来清理对象。
- `malloc()` 和 `free()` 不会调用对象的构造函数和析构函数,它们只是分配和释放内存块。

3. **大小参数**:
- `malloc()` 需要你显式提供要分配的内存块的大小,而 `new` 会根据所需类型自动计算所需内存大小。

4. **对数组的支持**:
- `new` 可以用于动态数组的分配,同时 `delete[]` 用于释放数组。它们会正确调用数组元素的构造和析构函数。
- `malloc()` 和 `free()` 不会自动调用数组元素的构造和析构函数,你需要手动管理数组元素的生命周期。

 

用自己话来总结:C中的两个函数侧重于简单粗暴地对内存进行指定的分配和释放,而C++中的两个函数会针对实际使用的对象进行计算大小和调用构造/析构函数

posted on 2024-04-26 21:27  Toriyung  阅读(3)  评论(0编辑  收藏  举报