malloc和allocate之间有什么区别

时间:2013-06-13 15:04:53

标签: c++

我遇到了一些广泛使用allocate的代码。例如,

char* recordDate = allocate<char>(20)

我以前从未使用过alloc,因此问题是,malloc和allocate之间有什么区别?

我可以告诉我的一个区别,虽然我不清楚它的优点,但是,malloc给出了原始内存,因为看起来分配会给原始内存,但我不必将指针强制转换为特定类型。

3 个答案:

答案 0 :(得分:3)

来自allocate文档:

  

通过调用n * sizeof(T)为未初始化的存储分配::operator new(std::size_t)个字节,但是未指定何时以及如何调用此函数

此外,从this question开始,您可以看到newmalloc导致不同的结果。

答案 1 :(得分:3)

看来不同之处在于allocate只需要提供所需的项目数而不是总大小,并且返回类型会自动转换为正确的类型。

在C ++中,你几乎不应该使用它们,但更喜欢调用适当构造函数的new

答案 2 :(得分:0)

从概念上讲,这两个功能完全相同。你唯一能看到差异的地方就是你开始“查看函数内部”或内存不足(malloc将返回NULL,因为allocate调用::new ,它将抛出bad_alloc例外)。

我认为使用allocate是“更好的C ++”(如果没有其他原因而不是“你不必投射allocate”。

话虽如此,使用::new T[elements]将是C ++中的常规方式,并且在您传入allocator的地方之外,这就是您应该做的事情。