C ++中的“new”和“malloc”和“calloc”有什么区别?

“新”,“malloc”和“calloc”等家族的区别是什么?

(什么时候)我需要“新”以外的任何东西吗?

其中之一是否使用其他方法实施?


newdelete是C ++特有的功能。 他们在C中不存在malloc是老派C做事的方式。 大多数时候,你不需要在C ++中使用它。

  • malloc分配未初始化的内存。 分配的内存必须free发布。
  • calloc就像malloc但用一个常量(0)初始化分配的内存。 它需要free释放。
  • new通过调用构造函数初始化分配的内存(如果它是一个对象)。 分配new内存的内存应该使用delete来释放(然后调用析构函数)。 它不需要您手动指定所需的大小并将其转换为适当的类型。 因此,它更现代化,不易出错。

  • 新建/删除+新建[] /删除[]:

  • new / delete是从堆中分配内存和释放内存的C ++方式。
  • new []和delete []是分配连续内存数组的c ++方法。
  • 应该使用,因为它比malloc更安全
  • 应该使用它,因为它调用构造函数/析构函数
  • 不能以重新分配的方式使用,但可以使用新的位置重新使用相同的数据缓冲区
  • 数据不能以新的方式分配,并且免费释放,也不能删除[]
  • malloc / free +系列:

  • malloc / free / family是从堆中分配和释放内存的C方式。
  • calloc与malloc相同,但也初始化了内存
  • 如果您可能需要重新分配内存,应该使用它
  • 数据不能用malloc进行分配,并用delete或delete []释放
  • 另请参阅我的相关答案


  • 新分配和呼叫ctor(订单未指定),删除dtor并将呼叫分配的内存释放到新的
  • malloc只分配一些内存,免费删除由malloc分配的内存
  • 新的可以使用malloc实现(虽然不是标准要求)
  • calloc和malloc做同样的事情,并将新分配的内存归零
  • 正如其他文章指出的:malloc / free是C ++的一部分,与C兼容。

    另请参阅:Stroustrup:new vs malloc

    链接地址: http://www.djcxy.com/p/78535.html

    上一篇: What is the difference between "new" and "malloc" and "calloc" in C++?

    下一篇: New, delete, malloc, free