了解 std::pmr::new_delete_resource

Mdp*_*p11 2 c++ c++17 c++pmr

我最近开始研究分配器和 c++17 中引入的新 pmr。

查看 cppreference 上 std::pmr::new_delete_resouce 的定义,我读到以下内容:

返回一个指向使用全局运算符new和运算符delete来分配内存的memory_resource的指针。

这个“全球”让我有点困惑。这是什么意思?它只是指操作员的正常调用吗?

int* i = new int;
delete i;
Run Code Online (Sandbox Code Playgroud)

因此在堆上分配东西,还是指分配全局变量的静态内存?

在这两种情况下使用这种结构有何意义?

Nic*_*las 5

operator new/delete可以针对特定类型进行覆盖,因此,如果您调用new T,系统将调用与 专门关联的内存分配器函数T

然而,低级内存分配函数仍然存在。这些函数是全局函数。因此,当该文本说它正在调用“全局运算符 new”时,它的字面意思是:该operator new函数是全局的,而不是特定于特定类型的。

该函数可以由用户提供,但这会影响尝试调用它的所有操作。


在这两种情况下使用这种结构有何意义?

要点是......您想使用全局内存分配函数为容器分配器分配内存。std::allocator毕竟,这就是事实。

PMR 内存资源是一种允许分配机制不属于容器类型的一部分的方法。因此任何人都vector<T, pmr::polymorphic_allocator>可以使用任何特定的pmr::memory_resource派生类来分配其内存。