C ++:是malloc等同于新的?

可能重复:
new / delete和malloc / free有什么区别?

嗨,大家好,我是c ++的noob,想知道是否

memblock = (char *)malloc( currentByteLength); 

相当于

memblock = new char[currentByteLength]

在c ++中。


memblock = (char *)malloc( currentByteLength); 

memblock = new char[currentByteLength];

现在没有区别。 但是如果你用int替换char ,那么是的,会有区别,因为在这种情况下, malloc会分配currentByteLength大小的内存,而new将分配大小为size(int) * currentByteLength内存。 所以要非常小心。

另外,如果你在new表达式中提到的类型是用户定义类型,那么默认构造函数将被称为currentByteLength次数,以构造对象!

对于内置类型,没有构造函数!


几乎。 我的意思是,既在堆上分配数据,又在处理诸如char或int之类的基本类型时,大致相同。 处理对象时有一个重要的区别。 new调用对象的构造函数,而malloc不调用。 这是因为malloc是一个C函数,并且不知道类的任何内容。

一般来说, new是使用C ++动态分配内存的首选方式,因为它是类型安全且易于使用的。 没有什么能阻止你使用malloc ,但不要混淆这些:不要在malloc分配的malloc上调用delete ,或者在分配了new内存上free它。 否则会发生坏事。 并且不要在用new[]创建的数组上使用delete ,要么在使用new创建的对象上delete[] (是的,我知道这很让人困惑,所以你应该使用vector来代替)。


如果内存块被分配malloc() ,则必须通过调用free()来释放它。 如果它是通过new[]分配的,则必须通过调用delete []来删除它。 使用错误的处置方法是一个错误。

另外,当你分配对象数组时,new和malloc的行为会非常不同。

此外,它们会报告内存不足的情况 - 新引发异常,malloc返回零。

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

上一篇: C++: is malloc equivalent to new?

下一篇: What does "Memory allocated at compile time" really mean?