在分配器中使用new函数和*alloc函数时,它们之间有区别吗
Is there a difference between the new and *alloc functions when using them in an allocator?
假设我的目的是编写一个分配器,这个分配器将作为一个练习;我注意到libstdc++
在std::allocator
(或libstdc++中的等效类)内部使用new
来分配实际内存,老实说,我期待着alloc
家族的函数
new
和*alloc
函数族都返回一个void *
,它们也分配内存,但从设计的角度来看,有一个比另一个更出色吗?你能提供一个写得好的new
的例子吗,或者在这个操作员战胜alloc
的情况下,为new
提供一个好的指导方针吗?
我的新代码库针对的是任何不早于C++11的代码,以防您需要关于语言规范的参考框架。
PS
对于new
,我显然指的是全局命名空间中的new
。
有两个主要区别。首先是malloc
和公司如果没有更多的内存,则返回一个空指针,因此您必须检查,如果得到空指针,则抛出std::bad_alloc
;operator new
函数将释放您,因为如果不能,它将抛出std::bad_alloc
分配内存。二是用户可以替换operator
new
/operator delete
功能;这通常在调试构建中完成跟踪内存泄漏和悬空指针。(在实践中,你可能会malloc
也是如此,但从形式上讲,这样做是未定义的行为。)
相关文章:
- 在调用函数时,ptr** 和 ptr*& 之间是否有区别,或者首选C++?
- 使用 std::move 将参数传递给函数,如果该参数声明为按值传递或使用移动操作数 &&,是否有区别?
- 函数重载和模板函数有什么区别?哪个更合适?
- 在成员初始值设定项列表和构造函数主体中委派构造函数有什么区别
- 两种类型的定义构造函数有什么区别?第一个使用":",第二个用大括号(如函数)定义它
- 使用 boost::this_thread::sleep_for() 和常规睡眠() 函数有什么区别
- 通过以下方式调用函数有什么区别
- 带取消引用和不带取消引用的函数有什么区别
- 赋值运算符和复制构造函数有什么区别?
- 当C++中都没有在基类中定义虚函数和纯虚函数时,虚拟函数和纯虚函数有什么区别
- 覆盖虚函数和隐藏非虚函数有什么区别
- 从新重载调用构造函数和直接调用构造函数有什么区别?
- "= default"析构函数和空析构函数有什么区别?
- 具有公共成员而没有构造函数的结构和类之间的编译器是否有区别
- 以下 c++ 构造函数有什么区别
- rand() 和 random() 函数有什么区别
- 在分配器中使用new函数和*alloc函数时,它们之间有区别吗
- 使用抽象基类的回调函数和虚函数有什么区别?
- 在C++中,方法和函数有什么区别
- 在匿名命名空间内部和外部定义静态函数有什么区别吗?