c++ - 在分配器中使用 new 和 *alloc 函数时有区别吗?

标签 c++ c++11 memory-management new-operator allocator

假设我的目的是编写一个分配器,这个分配器将作为我的练习;我注意到 libstdc++std::allocator 内部使用 new (或 libstdc++ 内部的等效类,分配实际内存,以老实说,我期待 alloc 系列的功能。

new*alloc 函数族都返回一个void *,它们也分配内存,但是从设计的角度来看看到有一个比另一个闪耀吗?如果此运算符胜过 alloc,您能否提供一个编写良好的 new 的示例,或有关 new 的良好指南?

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

附言

with new 我显然指的是全局命名空间中的 new

最佳答案

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

关于c++ - 在分配器中使用 new 和 *alloc 函数时有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26823403/

相关文章:

c++ - 警告 C4244 : 'argument' : conversion from 'double' to 'const int' , 可能丢失数据

c++ - qt 应用程序未运行

C++:部分专用模板类型参数作为另一个模板类成员类型

c++ - static_pointer_cast 通过继承和模板

c - 在 C 中顺序打开超过 4092 个文件

c++ - 变量在内存中的存储

Java 内存 : jstat vs Runtime. getRuntime().freeMemory();

c++ - 如何使用 std::bind 编译 C++ 程序?

c++ - Boost Asio 与一次性对象共享相同的 io_service

c++ - std::bind 不能与 lua_call 互操作