malloc和allocate的区别是什么?
what is difference between malloc and allocate
我遇到一些代码,广泛使用allocate
。例如,
char* recordDate = allocate<char>(20)
我以前从未使用过allocate,因此问题是,malloc和allocate之间的区别是什么?
我可以告诉的一个区别,虽然我不清楚它的优势,是,malloc提供原始内存,因为它似乎分配将提供原始内存,但我不必将指针转换为特定类型。
摘自allocate
文档:
通过调用
::operator new(std::size_t)
分配n * sizeof(T)
字节的未初始化存储,但是未指定何时以及如何调用该函数。
同样,从这个问题中,你可以看到new
和malloc
导致不同的结果。
看来不同之处是,allocate
只需要给出您想要的项目数量,而不是总大小,并且返回类型会自动转换为适合您的正确类型。
在c++中你几乎不应该使用这两种方法,而应该使用new
,它将调用适当的构造函数。
从概念上讲,这两个函数做的事情完全相同。唯一能看到区别的是,如果你开始"查看函数内部"或者内存耗尽(malloc
将返回NULL,因为allocate
调用::new
,它将抛出bad_alloc
异常)。
我认为使用allocate
是"更好的c++"(如果没有其他原因,而不是"你不必强制转换allocate
)。
话虽如此,使用::new T[elements]
将是c++中的正常方式,并且在您通过allocator
的地方之外,这是您应该做的。
相关文章:
- 为不同配置设置MSVC_RUNTIME_LIBRARY的正确方法是什么
- C++避免重复声明的语法是什么
- 在C++中,将大的无符号浮点数四舍五入为整数的最佳方法是什么
- 实现无开销push_back的最佳方法是什么
- C++从另一个类访问公共静态向量的正确方法是什么
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 这些情况有什么区别?我怎么知道什么是临时对象?
- 如果我提前将参数声明为变量而不是将它们内联写入函数调用,那有什么区别(在内存方面)?
- C++和Python之间平等含义的区别的根源是什么?
- 尾随空格是什么意思,它和空白有什么区别?
- 调试构建和发布构建、区别和用途是什么意思
- std::ifstream::in 和 std::ios::in 有什么区别?(显然是 C++ 中 std::ifstr
- 在 C++ STL 的比较函数中使用"<="符号而不是"<"符号有什么区别?
- 在头中声明变量而不是在源文件(cpp/h)中声明变量有什么区别
- "Thing thing;"和"Thing thing = Thing();"有什么区别,什么时候应该使用一个而不是另一个?
- 如果 a 是 cv::Mat 和 cv::Mat b=a.row(1),那么两个 cv::Mat 实例有什么区别
- 如果f是双精度数,f+=1和f+=1.0有什么区别吗?
- char和CString的区别和关系是什么?
- 那么,是什么区别了template(c.end(),_1)和template_back(_1)呢
- C++:按变量值而不是数字移位 ->有什么区别?