在分配器中使用new函数和*alloc函数时,它们之间有区别吗

Is there a difference between the new and *alloc functions when using them in an allocator?

本文关键字:函数 有区别 之间 alloc 分配器 new      更新时间:2023-10-16

假设我的目的是编写一个分配器,这个分配器将作为一个练习;我注意到libstdc++std::allocator(或libstdc++中的等效类)内部使用new来分配实际内存,老实说,我期待着alloc家族的函数

new*alloc函数族都返回一个void *,它们也分配内存,但从设计的角度来看,有一个比另一个更出色吗?你能提供一个写得好的new的例子吗,或者在这个操作员战胜alloc的情况下,为new提供一个好的指导方针吗?

我的新代码库针对的是任何不早于C++11的代码,以防您需要关于语言规范的参考框架。

PS

对于new,我显然指的是全局命名空间中的new

有两个主要区别。首先是malloc和公司如果没有更多的内存,则返回一个空指针,因此您必须检查,如果得到空指针,则抛出std::bad_allocoperator new函数将释放您,因为如果不能,它将抛出std::bad_alloc分配内存。二是用户可以替换operator new/operator delete功能;这通常在调试构建中完成跟踪内存泄漏和悬空指针。(在实践中,你可能会malloc也是如此,但从形式上讲,这样做是未定义的行为。)