8

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

char* recordDate = allocate<char>(20)

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

尽管我不清楚它的优势,但我可以说的一个区别是,malloc 提供原始内存,而 allocate 似乎会提供原始内存,但我不必将指针转换为特定类型。

4

3 回答 3

3

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

在 C++ 中,您几乎不应该使用任何一个,但更喜欢new哪个会调用适当的构造函数。

于 2013-06-13T15:34:18.327 回答
3

allocate文档:

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

另外,从这个问题中,您可以看到newmalloc导致不同的结果。

于 2013-06-13T15:07:39.593 回答
0

从概念上讲,这两个函数做的事情完全相同。唯一一次你会看到不同的是,如果你开始“查看函数内部”或者内存不足(malloc将返回 NULL,因为allocate调用::new,它会抛出bad_alloc异常)。

我认为使用它是“更好的 C++” allocate(如果没有其他原因,而不是“你不必强制转换” allocate)。

话虽如此, using::new T[elements]将是 C++ 中的正常方式,并且在您有 pass in 的地方之外allocator,这就是您应该做的。

于 2013-06-13T15:11:28.010 回答