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