我遇到了一些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,这就是您应该做的。