malloc和allocate的区别是什么?

what is difference between malloc and allocate

本文关键字:是什么 区别 allocate malloc      更新时间:2023-10-16

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

char* recordDate = allocate<char>(20)

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

我可以告诉的一个区别,虽然我不清楚它的优势,是,malloc提供原始内存,因为它似乎分配将提供原始内存,但我不必将指针转换为特定类型。

摘自allocate文档:

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

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

看来不同之处是,allocate只需要给出您想要的项目数量,而不是总大小,并且返回类型会自动转换为适合您的正确类型。

在c++中你几乎不应该使用这两种方法,而应该使用new,它将调用适当的构造函数。

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

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

话虽如此,使用::new T[elements]将是c++中的正常方式,并且在您通过allocator的地方之外,这是您应该做的。