📅  最后修改于: 2023-12-03 15:29:52.171000             🧑  作者: Mango
在 C++ 中,有多种动态内存分配的方法。本文主要介绍 new
和 malloc()
以及 free()
和 delete
这四种。
new
和 malloc()
均为动态分配内存时使用的函数,它们在使用上非常相似。同理,free()
和 delete
都为释放内存时使用的函数,也非常相似。
new
返回的是一个指向分配内存的类型指针,而 malloc()
返回的是一个 void
类型指针。也就是说,new
已经考虑了类型的大小,而 malloc()
并不考虑。
当内存分配失败时,new
会抛出std::bad_alloc
异常,而 malloc()
则返回 NULL
。
new
分配的内存空间会调用构造函数,使得内存空间有效;malloc()
分配的内存空间不会调用构造函数,因此需要通过其他方式使得内存空间有效。
delete
可以释放 new
分配的内存空间,而 free()
则不能。
在 C++ 中,我们应该尽量避免使用 malloc()
和 free()
。相对而言,new
和 delete
更符合 C++ 面向对象的思想。
int* p = new int(10); //动态分配内存
delete p; //释放内存
int* p = (int*)malloc(sizeof(int)); //动态分配内存
*p = 10;
free(p); //释放内存