`malloc`和`new`之间的区别

时间:2010-11-23 11:15:47

标签: c++ dynamic-memory-allocation

  

可能重复:
  What is the difference between new/delete and malloc/free?

有人可以修改/编辑下面的内容 - malloc和new之间的区别 - 看看一切是否正确,或者我错过了什么或者出了什么问题?谢谢,

mallocnew都用于动态内存分配。

malloc是C函数,而new是C ++运算符。

malloc在动态分配内存时需要特殊的类型转换, 而new不需要任何类型转换。

每当我们使用new分配内存时,它也会调用任何必需的构造函数,而malloc则不会这样做。

如果内存耗尽,

malloc可能会失败并返回NULL指针,而new永远不会返回NULL指针,但会通过抛出异常来指示失败。

使用malloc时,free是用于释放已分配内存的C函数。

使用new时,delete是用于释放已分配内存的C ++运算符,并调用任何所需的析构函数。

4 个答案:

答案 0 :(得分:2)

需要注意和记住的重要事项:

  1. placement new
  2. delete[]
  3. _set_new_handler()功能

答案 1 :(得分:2)

我想在您的差异中添加以下内容,

  1. malloc“确实是分配内存并返回指针。无论出于何种原因,C语言的设计者将其实现为标准库函数。  另一方面,“new”是通过分配内存并调用适当的构造函数来实例化对象。对我来说似乎很合理,这个函数与简单分配存储的东西相比,更多地依赖于语言。

  2. 新的调用构造函数,而malloc()则没有。事实上,原始数据类型(char,int,float等)也可以用new初始化。

答案 2 :(得分:1)

看起来不错,但你可以强调一个事实,就是你永远不要将mallocdeletenewfree混合。

答案 3 :(得分:1)

不要忘记new[]delete[],分别用于数组分配和释放。