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?