我遇到了一些广泛使用allocate
的代码。例如,
char* recordDate = allocate<char>(20)
我以前从未使用过alloc,因此问题是,malloc和allocate之间有什么区别?
我可以告诉我的一个区别,虽然我不清楚它的优点,但是,malloc给出了原始内存,因为看起来分配会给原始内存,但我不必将指针强制转换为特定类型。
答案 0 :(得分:3)
来自allocate
文档:
通过调用
n * sizeof(T)
为未初始化的存储分配::operator new(std::size_t)
个字节,但是未指定何时以及如何调用此函数。
此外,从this question开始,您可以看到new
和malloc
导致不同的结果。
答案 1 :(得分:3)
看来不同之处在于allocate
只需要提供所需的项目数而不是总大小,并且返回类型会自动转换为正确的类型。
在C ++中,你几乎不应该使用它们,但更喜欢调用适当构造函数的new
。
答案 2 :(得分:0)
从概念上讲,这两个功能完全相同。你唯一能看到差异的地方就是你开始“查看函数内部”或内存不足(malloc
将返回NULL,因为allocate
调用::new
,它将抛出bad_alloc
例外)。
我认为使用allocate
是“更好的C ++”(如果没有其他原因而不是“你不必投射allocate
”。
话虽如此,使用::new T[elements]
将是C ++中的常规方式,并且在您传入allocator
的地方之外,这就是您应该做的事情。