动态内存管理

动态内存管理

智能指针

  • 智能指针使得自动、异常安全的对象生存期管理可行。

  • 定义于头文件 <memory>

指针类别

unique_ptr拥有独有对象所有权语义的智能指针
(类模板)
shared_ptr

(C++11)
拥有共享对象所有权语义的智能指针
(类模板)
weak_ptr

(C++11)
到 std::shared_ptr 所管理对象的弱引用
(类模板)
auto_ptr

(C++17 中移除)
拥有严格对象所有权语义的智能指针
(类模板)
### 辅助类

| owner_less

(C++11) | 提供基于所有者的,共享指针和弱指针的混合类型的排序
(类模板) | | enable_shared_from_this

(C++11) | 允许对象创建指代自身的 shared_ptr
(类模板) | | bad_weak_ptr

(C++11) | 访问指向已销毁对象的 weak_ptr 时抛出的异常
(类) | | default_delete

(C++11) | unique_ptr 的默认删除器
(类模板) |

分配器

分配器是封装内存分配策略的类模板。这允许泛型容器从数据自身将内存管理解耦合。

定义于头文件 <memory>
allocator默认的分配器
(类模板)
allocator_traits

(C++11)
提供关于分配器类型的信息
(类模板)
allocator_arg_t

(C++11)
标签类型,用于选择具分配器的构造函数重载
(类)
allocator_arg

(C++11)
用于选择具分配器的构造函数的 std::allocator_arg_t 对象
(常量)
uses_allocator

(C++11)
检查指定的类型是否支持使用分配器的构造
(类模板)
uses_allocator_construction_args

(C++20)
准备匹配给定类型所要求的使用分配器构造的口味的参数列表
(函数模板)
make_obj_using_allocator

(C++20)
以使用分配器构造的手段创建给类型的对象
(函数模板)
uninitialized_construct_using_allocator

(C++20)
以使用分配器构造的手段在指定的内存位置创建给定类型的对象
(函数模板)
定义于头文件 <scoped_allocator>
scoped_allocator_adaptor

(C++11)
为多级容器实现的多级分配器
(类模板)
定义于头文件 <memory_resource>
定义于命名空间 pmr
polymorphic_allocator

(C++17)
以 std::memory_resource 构造,支持基于它的运行时多态的分配器
(类模板)

内存资源

内存资源实现可为 std::pmr::polymorphic_allocator 所用的内存分配策略

定义于头文件 <memory_resource>
定义于命名空间 pmr
memory_resource

(C++17)
一个抽象接口,用于各种封装内存资源的类
(类)
new_delete_resource

(C++17)
返回一个静态的程序范围 std::pmr::memory_resource,它使用全局 operator new 与 operator delete 分配和解分配内存
(函数)
null_memory_resource

(C++17)
返回一个不进行任何分配的静态 std::pmr::memory_resource
(函数)
get_default_resource

(C++17)
获取缺省 std::pmr::memory_resource
(函数)
set_default_resource

(C++17)
设置缺省 std::pmr::memory_resource
(函数)
pool_options

(C++17)
一组池资源的构造函数选项
(类)
synchronized_pool_resource

(C++17)
线程安全的 std::pmr::memory_resource,用于管理具有不同块大小的池中的分配
(类)
unsynchronized_pool_resource

(C++17)
线程不安全的 std::pmr::memory_resource,用于管理具有不同块大小的池中的分配
(类)
monotonic_buffer_resource

(C++17)
一种特殊用途的 std::pmr::memory_resource,仅在资源被销毁时才释放所分配内存
(类)

未初始化存储

提供数个工具以创建并访问未初始化存储

定义于头文件 <memory>
uninitialized_copy将范围内的对象复制到未初始化的内存区域
(函数模板)
uninitialized_copy_n

(C++11)
将指定数量的对象复制到未初始化的内存区域
(函数模板)
uninitialized_fill复制一个对象到以范围定义的未初始化内存区域
(函数模板)
uninitialized_fill_n复制一个对象到以起点和计数定义的未初始化内存区域
(函数模板)
uninitialized_move

(C++17)
移动一个范围的对象到未初始化的内存区域
(函数模板)
uninitialized_move_n

(C++17)
移动一定数量对象到未初始化内存区域
(函数模板)
uninitialized_default_construct

(C++17)
在范围所定义的未初始化的内存区域以默认初始化构造对象
(函数模板)
uninitialized_default_construct_n

(C++17)
在起始和计数所定义的未初始化内存区域用默认初始化构造对象
(函数模板)
uninitialized_value_construct

(C++17)
在范围所定义的未初始化内存中用值初始化构造对象
(函数模板)
uninitialized_value_construct_n

(C++17)
在起始和计数所定义的未初始化内存区域以值初始化构造对象
(函数模板)
destroy_at

(C++17)
销毁在给定地址的对象
(函数模板)
destroy

(C++17)
销毁一个范围中的对象
(函数模板)
destroy_n

(C++17)
销毁范围中一定数量的对象
(函数模板)
construct_at

(C++20)
在给定地址创建对象
(函数模板)
raw_storage_iterator

(C++17 中弃用)(C++20 中移除)
允许标准算法存储结果于未初始化内存的迭代器
(类模板)
get_temporary_buffer

(C++17 中弃用)(C++20 中移除)
获得未初始化存储
(函数模板)
return_temporary_buffer

(C++17 中弃用)(C++20 中移除)
释放未初始化存储
(函数模板)

有制约的未初始化内存算法 (C++20)

C++20 提供有制约的未初始化内存算法,它们接受范围参数或迭代器-哨位对。

定义于头文件 <memory>
定义于命名空间 std::ranges
uninitialized_copy

(C++20)
复制元素范围到未初始化的内存区域
(niebloid)
uninitialized_copy_n

(C++20)
复制一定量元素到未初始化的内存区域
(niebloid)
uninitialized_fill

(C++20)
复制一个对象到范围所定义的未初始化的内存区域
(niebloid)
uninitialized_fill_n

(C++20)
复制一个对象到起始与计数所定义的未初始化的内存区域
(niebloid)
uninitialized_move

(C++20)
移动对象范围到未初始化的内存区域
(niebloid)
uninitialized_move_n

(C++20)
移动一定量对象到未初始化的内存区域
(niebloid)
uninitialized_default_construct

(C++20)
在范围所定义的未初始化的内存区域以默认初始化构造对象
(niebloid)
uninitialized_default_construct_n

(C++20)
在起始与计数所定义的未初始化的内存区域以默认初始化构造对象
(niebloid)
uninitialized_value_construct

(C++20)
在范围所定义的未初始化的内存区域以值初始化构造对象
(niebloid)
uninitialized_value_construct_n

(C++20)
在起始与计数所定义的未初始化的内存区域以值初始化构造对象
(niebloid)
destroy_at

(C++20)
销毁位于给定地址的元素
(niebloid)
destroy

(C++20)
销毁范围中的元素
(niebloid)
destroy_n

(C++20)
销毁范围中一定量的元素
(niebloid)
construct_at

(C++20)
在给定地址创建对象
(niebloid)

垃圾收集器支持

定义于头文件 <memory>
declare_reachable

(C++11)
声明一个对象不能被回收
(函数)
undeclare_reachable

(C++11)
声明一个对象可以被回收
(函数模板)
declare_no_pointers

(C++11)
声明该内存区域不含可追踪指针
(函数)
undeclare_no_pointers

(C++11)
取消 std::declare_no_pointers 的效果
(函数)
pointer_safety

(C++11)
列出指针安全模式
(枚举)
get_pointer_safety

(C++11)
返回当前的指针安全模式
(函数)

杂项

定义于头文件 <memory>
pointer_traits

(C++11)
提供关于指针式类型的信息
(类模板)
to_address

(C++20)
从指针式类型获得裸指针
(函数模板)
addressof

(C++11)
获得对象的实际地址,即使其重载了 & 运算符
(函数模板)
align

(C++11)
对齐缓冲区中的指针
(函数)
assume_aligned

(C++20)
告知编译器指针已对齐
(函数模板)

C 风格内存管理

包含如 std::malloc 、 std::free

低层内存管理

包含如 operator new 、 operator delete 、 std::set_new_handler

updatedupdated2024-05-102024-05-10