内存管理库
来自 cppreference.cn
< cpp
目录 |
[编辑] 智能指针 (自 C++11 起)
智能指针实现了自动的、异常安全的、对象生命周期管理。
定义于头文件
<memory> | |
指针类别 | |
(C++11) |
具有唯一对象所有权语义的智能指针 (类模板) |
(C++11) |
具有共享对象所有权语义的智能指针 (类模板) |
(C++11) |
对由 std::shared_ptr 管理的对象的弱引用 (类模板) |
(C++11 中已废弃)(C++17 中已移除) |
具有严格对象所有权语义的智能指针 (类模板) |
辅助类 | |
(C++11) |
提供基于所有者的共享指针和弱指针的混合类型排序 (类模板) |
(C++26) |
为共享指针和弱指针提供基于所有者的哈希 (类) |
(C++26) |
提供基于所有者的共享指针和弱指针的混合类型相等比较 (类) |
(C++11) |
允许对象创建指向自身的 shared_ptr (类模板) |
(C++11) |
当访问指向已销毁对象的 weak_ptr 时抛出的异常(类) |
(C++11) |
unique_ptr 的默认删除器 (类模板) |
智能指针适配器 (自 C++23 起) | |
(C++23) |
与外部指针设置器交互,并在销毁时重置智能指针 (类模板) |
(C++23) |
创建带有相关智能指针和重置参数的 out_ptr_t (函数模板) |
(C++23) |
与外部指针设置器交互,从智能指针获取初始指针值,并在销毁时重置它 (类模板) |
(C++23) |
创建一个带有关联智能指针和重置参数的 inout_ptr_t (函数模板) |
[编辑] 分配器
分配器是封装内存分配策略的类模板。这使得通用容器能够将内存管理与数据本身分离。
定义于头文件
<memory> | |
默认分配器 (类模板) | |
(C++11) |
提供关于分配器类型的信息 (类模板) |
(C++23) |
记录 allocate_at_least 分配的存储地址和实际大小(类模板) |
(C++11) |
用于选择分配器感知构造函数的标记 (标签) |
(C++11) |
检查指定类型是否支持 uses-allocator 构造 (类模板) |
准备与给定类型所需的使用分配器构造方式匹配的参数列表 (函数模板) | |
(C++20) |
通过 uses-allocator 构造创建给定类型的对象 (函数模板) |
通过使用分配器构造在指定内存位置创建给定类型的对象 (函数模板) | |
定义于头文件
<scoped_allocator> | |
(C++11) |
为多层容器实现多层分配器 (类模板) |
定义于头文件
<memory_resource> | |
定义在命名空间
std::pmr 中 | |
(C++17) |
一个支持基于其构造的 std::pmr::memory_resource 的运行时多态性的分配器 (类模板) |
[编辑] 内存资源 (自 C++17 起)
内存资源实现了内存分配策略,可由 std::pmr::polymorphic_allocator 使用。
定义于头文件
<memory_resource> | |
定义在命名空间
std::pmr 中 | |
(C++17) |
封装内存资源的类的抽象接口 (类) |
(C++17) |
返回一个静态的、程序范围的 std::pmr::memory_resource,它使用全局的 operator new 和 operator delete 来分配和释放内存 (函数) |
(C++17) |
返回一个静态的 std::pmr::memory_resource,它不执行任何分配 (函数) |
(C++17) |
获取默认的 std::pmr::memory_resource (函数) |
(C++17) |
设置默认的 std::pmr::memory_resource (函数) |
(C++17) |
池资源的一组构造函数选项 (类) |
(C++17) |
一种线程安全的 std::pmr::memory_resource,用于管理不同块大小池中的分配 (类) |
(C++17) |
一种线程不安全的 std::pmr::memory_resource,用于管理不同块大小池中的分配 (类) |
(C++17) |
一种特殊用途的 std::pmr::memory_resource,只在资源被销毁时释放分配的内存 (类) |
[编辑] 未初始化存储 (直到 C++17)
提供了几个用于创建和访问原始存储的实用程序。
定义于头文件
<memory> | |
(在 C++17 中已弃用)(在 C++20 中已移除) |
一个迭代器,允许标准算法将结果存储在未初始化内存中 (类模板) |
(在 C++17 中已弃用)(在 C++20 中已移除) |
获取未初始化存储 (函数模板) |
(在 C++17 中已弃用)(在 C++20 中已移除) |
释放未初始化存储 (函数模板) |
[编辑] 未初始化内存算法
定义于头文件
<memory> | |
将对象范围复制到未初始化内存区域 (函数模板) | |
(C++11) |
将一定数量的对象复制到未初始化内存区域 (函数模板) |
将对象复制到由范围定义的未初始化内存区域 (函数模板) | |
将对象复制到由起始和计数定义的未初始化内存区域 (函数模板) | |
(C++17) |
将一系列对象移动到未初始化内存区域 (函数模板) |
(C++17) |
将多个对象移动到未初始化内存区域 (函数模板) |
通过默认初始化在由范围定义的未初始化内存区域中构造对象 (函数模板) | |
在由起始和计数定义的未初始化内存区域中,通过默认初始化构造对象 (函数模板) | |
在由范围定义的未初始化内存区域中,通过值初始化构造对象 (函数模板) | |
在由起始和计数定义的未初始化内存区域中,通过值初始化构造对象 (函数模板) | |
(C++17) |
销毁给定地址处的对象 (函数模板) |
(C++17) |
销毁对象范围 (函数模板) |
(C++17) |
销毁范围内的多个对象 (函数模板) |
(C++20) |
在给定地址创建对象 (函数模板) |
[编辑] 受限未初始化内存算法 (自 C++20 起)
C++20 提供了接受范围参数或迭代器-哨兵对的受限未初始化内存算法。
定义于头文件
<memory> | |
定义于命名空间
std::ranges | |
指定迭代器、哨兵和范围上的某些操作不抛出异常 (仅供说明的概念*) | |
(C++20) |
将对象范围复制到未初始化内存区域 (算法函数对象) |
(C++20) |
将一定数量的对象复制到未初始化内存区域 (算法函数对象) |
(C++20) |
将对象复制到由范围定义的未初始化内存区域 (算法函数对象) |
(C++20) |
将对象复制到由起始和计数定义的未初始化内存区域 (算法函数对象) |
(C++20) |
将一系列对象移动到未初始化内存区域 (算法函数对象) |
(C++20) |
将多个对象移动到未初始化内存区域 (算法函数对象) |
通过默认初始化在由范围定义的未初始化内存区域中构造对象 (算法函数对象) | |
通过默认初始化在由起始和计数定义的未初始化内存区域中构造对象 (算法函数对象) | |
在由范围定义的未初始化内存区域中,通过值初始化构造对象 (算法函数对象) | |
在由起始和计数定义的未初始化内存区域中,通过值初始化构造对象 (算法函数对象) | |
(C++20) |
销毁给定地址处的对象 (算法函数对象) |
(C++20) |
销毁对象范围 (算法函数对象) |
(C++20) |
销毁范围内的多个对象 (算法函数对象) |
(C++20) |
在给定地址创建对象 (算法函数对象) |
[编辑] 垃圾回收器支持 (直到 C++23)
定义于头文件
<memory> | |
(C++11)(在 C++23 中已移除) |
声明一个对象不能被回收 (函数) |
(C++11)(在 C++23 中已移除) |
声明一个对象可以被回收 (函数模板) |
(C++11)(在 C++23 中已移除) |
声明一个内存区域不包含可追溯指针 (函数) |
(C++11)(在 C++23 中已移除) |
取消 std::declare_no_pointers 的效果 (函数) |
(C++11)(在 C++23 中已移除) |
列出指针安全模型 (枚举) |
(C++11)(在 C++23 中已移除) |
返回当前指针安全模型 (函数) |
[编辑] 显式生命周期管理 (自 C++23 起)
定义于头文件
<memory> | |
在给定存储中隐式创建对象,并重用对象表示 (函数模板) |
[编辑] 杂项
定义于头文件
<memory> | |
(C++11) |
提供有关类指针类型的信息 (类模板) |
(C++20) |
从类指针类型获取原始指针 (函数模板) |
(C++11) |
获取对象的实际地址,即使 & 运算符被重载(函数模板) |
(C++11) |
在缓冲区中对齐指针 (函数) |
(C++20) |
通知编译器指针已对齐 (函数模板) |
(C++26) |
检查指针是否指向对齐值至少为给定值的对象 (函数模板) |
[编辑] 低级内存管理
包括例如 operator new、operator delete、std::set_new_handler。
定义于头文件
<new> |
[编辑] C 风格内存管理
包括例如 std::malloc、std::free。
定义于头文件
<cstdlib> |