【问题标题】:Using malloc Versus new使用 malloc 与 new
【发布时间】:2010-12-08 17:24:48
【问题描述】:

我使用pointer = new type[size] 有一段时间了,最​​近才发现malloc

mallocnew 之间是否存在技术差异?如果是这样,使用一个比另一个有什么优势?

【问题讨论】:

    标签: c++ memory pointers malloc new-operator


    【解决方案1】:

    malloc 是一个函数调用,在这种情况下是一个新的表达式。

    区别在于; new 将分配内存并使用默认构造函数构造该数组的所有元素。 malloc 只是归还了一块未初始化的内存。

    此外,::operator new 将抛出 std::bad_alloc 或一个新的处理程序(如果已注册)。

    标准库定义了一个新参数,它接受另一个参数nothrow,如果分配失败,则返回一个 0 指针。

    int *x = new(std::nothrow) int[20]; // include <new>, return 0 on failure
    

    【讨论】:

    • 你说了我要说的,但更好更快。不过,我只是在查找一件事:我的记忆是否正确,在过时的 C 标准版本中,free(NULL) 具有未定义的效果,而 delete[] NULL 始终明确是安全的?我无法立即找到任何证据,所以我开始怀疑这是否是我的误解。
    • Tommy, IIRC free(0) 已定义。我不知道 C 的古代版本;)
    • 在没有实际规格的情况下,谷歌搜索建议它在 C99 中,可能在 C89 中,所以我认为它不重要,除了,嗯,取消任何潜在的论点 delete[] 是 '比免费更安全...在 new/malloc 讨论中,可能值得指出 delete 和 delete[] 之间的区别?就像两种内存分配方法之间的技术差异一样。
    • 同意,但这远远超出了原始问题的范围,不是吗?
    • 换句话说,如果我使用pointer = new int[20],我可以预期整数都为零,但如果我决定使用malloc,这些值可能是垃圾?
    【解决方案2】:

    您可以在herehere中找到常见问题解答

    还有一个很好的答案: In what cases do I use malloc vs new?

    【讨论】:

      猜你喜欢
      • 2011-11-19
      • 2016-03-23
      • 2023-03-11
      • 1970-01-01
      • 2017-01-02
      • 2015-10-11
      • 2011-12-19
      • 2016-04-21
      • 1970-01-01
      相关资源
      最近更新 更多