动态内存管理
来自 cppreference.com
< cpp
内容 |
[编辑] 智能指针
智能指针支持自动的、异常安全的、对象生命周期管理。
定义在头文件
<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) |
使用关联的智能指针和重置参数创建 out_ptr_t (函数模板) |
(C++23) |
与外部指针设置器交互,从智能指针获取初始指针值,并在销毁时重置它 (类模板) |
(C++23) |
创建一个关联了智能指针和重置参数的 inout_ptr_t (函数模板) |
[编辑] 分配器
分配器是封装内存分配策略的类模板。这允许泛型容器将内存管理与数据本身分离。
定义在头文件
<memory> 中 | |
默认分配器 (类模板) | |
(C++11) |
提供有关分配器类型的的信息 (类模板) |
(C++23) |
记录由 allocate_at_least 分配的存储的地址和实际大小(类模板) |
(C++11) |
用于选择支持分配器感知构造函数的标记 (标记) |
(C++11) |
检查指定类型是否支持使用分配器构造 (类模板) |
准备与给定类型所需的使用分配器构造风格匹配的参数列表 (函数模板) | |
(C++20) |
通过使用分配器构造创建给定类型的对象 (函数模板) |
通过使用分配器构造在指定内存位置创建给定类型的对象 (函数模板) | |
定义在头文件
<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) |
返回一个使用全局 operator new 和 operator delete 来分配和释放内存的静态程序范围 std::pmr::memory_resource (函数) |
(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,它只在资源被销毁时释放分配的内存 (类) |
[编辑] 未初始化存储
提供了一些实用程序来创建和访问原始存储。
定义在头文件
<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) |
将对象范围复制到未初始化的内存区域 (niebloid) |
(C++20) |
将一定数量的对象复制到未初始化的内存区域 (niebloid) |
(C++20) |
将对象复制到未初始化的内存区域(由范围定义) (niebloid) |
(C++20) |
将对象复制到未初始化的内存区域(由起始位置和计数定义) (niebloid) |
(C++20) |
将对象范围移动到未初始化的内存区域 (niebloid) |
(C++20) |
将一定数量的对象移动到未初始化的内存区域 (niebloid) |
通过 默认初始化 在未初始化的内存区域(由范围定义)中构造对象 (niebloid) | |
通过 默认初始化 在未初始化的内存区域中构造对象,该区域由起始位置和数量定义 (niebloid) | |
通过 值初始化 在未初始化的内存区域(由范围定义)中构造对象 (niebloid) | |
通过 值初始化 在未初始化的内存区域(由起始位置和计数定义)中构造对象 (niebloid) | |
(C++20) |
销毁给定地址处的对象 (niebloid) |
(C++20) |
销毁一系列对象 (niebloid) |
(C++20) |
销毁一系列对象中的指定数量对象 (niebloid) |
(C++20) |
在指定地址创建对象 (niebloid) |
[编辑] 垃圾收集器支持 (直到 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) |
告知编译器指针已对齐 (函数模板) |
[编辑] 低级内存管理
包括例如 operator new、operator delete、std::set_new_handler
定义在头文件
<new> 中 |
[编辑] C 风格内存管理
包括例如 std::malloc、std::free
定义在头文件
<cstdlib> 中 |