📜  C++ 中的 new vs malloc() 和 free() vs delete(1)

📅  最后修改于: 2023-12-03 15:29:52.171000             🧑  作者: Mango

C++ 中的 new vs malloc() 和 free() vs delete

在 C++ 中,有多种动态内存分配的方法。本文主要介绍 newmalloc() 以及 free()delete 这四种。

相似点

newmalloc() 均为动态分配内存时使用的函数,它们在使用上非常相似。同理,free()delete 都为释放内存时使用的函数,也非常相似。

差异点
返回值类型

new 返回的是一个指向分配内存的类型指针,而 malloc() 返回的是一个 void 类型指针。也就是说,new 已经考虑了类型的大小,而 malloc() 并不考虑。

内存分配失败处理

当内存分配失败时,new 会抛出std::bad_alloc 异常,而 malloc() 则返回 NULL

内存分配的有效性

new 分配的内存空间会调用构造函数,使得内存空间有效;malloc() 分配的内存空间不会调用构造函数,因此需要通过其他方式使得内存空间有效。

被释放的内存指针类型

delete 可以释放 new 分配的内存空间,而 free() 则不能。

建议

在 C++ 中,我们应该尽量避免使用 malloc()free()。相对而言,newdelete 更符合 C++ 面向对象的思想。

示例代码
使用 new 和 delete
int* p = new int(10); //动态分配内存
delete p; //释放内存
使用 malloc() 和 free()
int* p = (int*)malloc(sizeof(int)); //动态分配内存
*p = 10;
free(p); //释放内存