polymorphic_allocator:如何更改容器的内存资源

时间:2017-12-17 13:22:36

标签: c++ c++17 allocator

假设我已使用std::pmr::vector int。它已经初始化并且包含N个项目(重要的是N大于0)。在引擎盖下它使用内存资源M1 到现在为止还挺好。它可以工作,我可以将它与另一个使用完全不同的内存资源的整数向量进行比较,以及所有其他奇异的东西,多态分配器必须提供。

现在我想改变向量的底层内存资源(在性能或其他方面放下所有可能的缺点)。

这样的事情:

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

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

我很确定我错过了一些基本的东西,这可能和任务一样简单。我错了吗?

1 个答案:

答案 0 :(得分:4)

没有简单的方法。您不能在其生命周期内更改与容器关联的内存资源。您可以使用allocator-extended copy / move构造函数创建具有所需内存资源的 new 容器,但不能更改现有内存资源的内存资源。