c++ - 多态分配器 : how to change the memory resource of a container

标签 c++ c++17 allocator

假设我已经使用了 intstd::pmr::vector 。它已经初始化并且包含 N 个项目(重要的是 N 大于 0)。它在底层使用内存资源M1
到目前为止,一切都很好。它有效,我可以将它与另一个使用完全不同的内存资源的整数 vector 进行比较,等等,以及多态分配器必须提供的所有其他奇妙的东西。

现在我想更改 vector 的底层内存资源(抛开性能或其他方面所有可能的缺点)。

类似这样的事情:

template<typename MR>
void setMemoryResource(MR *resource) {
    // ... ??
}

如何管理它以便操作后所有元素仍然存在?
我要求这些容器和分配器都没有方法来设置不同的内存资源。因此我什至想知道这是否可能。
我可以想象几种方法来做到这一点,但没有一种看起来是惯用的。实际上,所有这些看起来都像是绕过 API 漏洞的棘手方法。

我很确定我错过了一些基本的东西,它可能就像作业一样简单。我错了吗?

最佳答案

没有简单的方法。您不能在容器的生命周期内更改与容器关联的内存资源。您可以使用分配器扩展的复制/移动构造函数创建一个具有所需内存资源的容器,但不能更改现有容器的内存资源。

关于c++ - 多态分配器 : how to change the memory resource of a container,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47855555/

相关文章:

c++ - MsgPack c++ 打包长度超过 32 个字符的字符串[Ubuntu]

c++ - 为什么分配器需要构造和销毁接口(interface)?

c++ - 可以为 3rd 方库取代/取代默认 C++ std::allocator 吗?

c++ - 如果基类包含数组成员,则派生类的构造函数不能是 constexpr

c++ - 拆分并从字符串转换为字符数组

c++ - std::vector 如何分配对象?

c++ - 如何让一个类通过作用域分配器?

c++ - 无法使用 C++ 和 visual studio 2010 express 编译基本的 SDL 教程 - 未找到 SDL.h

c++ - 重新打开修改后的网格后打开网格边缘索引

c++ - 当getline()读取的行大于系统内存时会发生什么?