polymorphic_allocator: 如何改变一个容器的内存资源
polymorphic_allocator: how to change the memory resource of a container
假设我已经使用了 std::pmr::vector
个 int
。它已经初始化并且包含 N 个项目(重要的是 N 大于 0)。在引擎盖下它使用内存资源 M1
.
到目前为止,一切都很好。它有效,我可以将它与另一个使用完全不同的内存资源的整数向量进行比较,等等,以及多态分配器必须提供的所有其他奇妙的东西。
现在我想更改我的向量的底层内存资源(抛开性能或其他方面的所有可能缺点)。
像这样:
template<typename MR>
void setMemoryResource(MR *resource) {
// ... ??
}
我如何管理它以便所有元素在操作后仍然存在?
我问这些容器和分配器都没有设置不同内存资源的方法。所以我什至想知道这是否可能。
我可以想象有几种方法可以做到这一点,但其中 none 看起来很惯用。实际上,所有这些看起来都像是绕过 API.
中的一个洞的棘手方法
我很确定我错过了一些基本的东西,它可能和作业一样简单。我错了吗?
没有简单的方法。它旨在您无法在其生命周期内更改与容器关联的内存资源。您可以使用分配器扩展的 copy/move 构造函数创建具有所需内存资源的 new 容器,但不能更改现有容器的内存资源。
假设我已经使用了 std::pmr::vector
个 int
。它已经初始化并且包含 N 个项目(重要的是 N 大于 0)。在引擎盖下它使用内存资源 M1
.
到目前为止,一切都很好。它有效,我可以将它与另一个使用完全不同的内存资源的整数向量进行比较,等等,以及多态分配器必须提供的所有其他奇妙的东西。
现在我想更改我的向量的底层内存资源(抛开性能或其他方面的所有可能缺点)。
像这样:
template<typename MR>
void setMemoryResource(MR *resource) {
// ... ??
}
我如何管理它以便所有元素在操作后仍然存在?
我问这些容器和分配器都没有设置不同内存资源的方法。所以我什至想知道这是否可能。
我可以想象有几种方法可以做到这一点,但其中 none 看起来很惯用。实际上,所有这些看起来都像是绕过 API.
我很确定我错过了一些基本的东西,它可能和作业一样简单。我错了吗?
没有简单的方法。它旨在您无法在其生命周期内更改与容器关联的内存资源。您可以使用分配器扩展的 copy/move 构造函数创建具有所需内存资源的 new 容器,但不能更改现有容器的内存资源。