当我们有新的/删除时,为什么要使用malloc/free?

Par*_*rag 5 c++ memory-management

有什么用的malloc,并free当我们有newdeleteC++中.我想这两个功能freedelete是一样的.

Luc*_*ore 8

他们不一样.new调用构造函数,malloc只需分配内存.

此外,它是混合两者的未定义行为(即使用newwith freemallocwith delete).

在C++中,你应该使用newdelete,malloc并且free出于与C的兼容性原因.

  • @Parag不"在C++中,你应该使用new并删除"答案吗?不要使用malloc/free. (4认同)

Alo*_*ave 5

在C++中,使用malloc&free而不是new&很少有用delete.

我能想到的一个场景是:

如果你不想通过隐式构造函数调用来初始化你的内存,并且只需要一个确定的内存分配用于放置new,那么使用mallocfree不是new和它是完全正常的delete.

另一方面,重要的是要知道malloc并且new不一样!
直接的两个重要区别是:

  • new保证你的类的构造函数的callng用于初始化类成员,而malloc不是,一个人必须做一个额外的memset或相关的函数调用post malloc来初始化分配的内存来做一些有意义的事情.

  • 一个很大的优点是,new你不需要NULL在每次分配后检查,只需附上异常处理程序就可以完成这项工作,从而节省了多余的错误检查malloc.

  • @Als`malloc()`和`:: operator new()`之间的一个重要区别.您可以合法地替换`:: operator new()`,并且`malloc()`保证在其实现中不使用`:: operator new()`,因此您可以在`的覆盖中使用`malloc()` operator new()`.(形式上,`malloc`和`free`是唯一具有此保证的函数.在我的`:: operator new()`的实现中,它倾向于假设像`memset`和`memcpy`这样的函数不会调用`:: operator new()`或者.) (3认同)
  • @hvd:`new char []`有一些(非常小的)开销.即,它存储在存储块中分配的字符数. (2认同)