Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 多态分配器:如何更改容器的内存资源_C++_C++17_Allocator - Fatal编程技术网

C++ 多态分配器:如何更改容器的内存资源

C++ 多态分配器:如何更改容器的内存资源,c++,c++17,allocator,C++,C++17,Allocator,假设我已经在使用一个int的std::pmr::vector。它已经初始化并且包含N个项。重要的是N大于0。在引擎盖下,它使用内存资源M1。 到现在为止,一直都还不错。它可以工作,我可以将它与另一个使用完全不同的内存资源的整数向量进行比较,等等,与多态分配器必须提供的所有其他奇妙的东西进行比较 现在我想改变我的向量的底层内存资源,抛开性能方面的所有可能的缺点 大概是这样的: template<typename MR> void setMemoryResource(MR *resour

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

现在我想改变我的向量的底层内存资源,抛开性能方面的所有可能的缺点

大概是这样的:

template<typename MR>
void setMemoryResource(MR *resource) {
    // ... ??
}
我如何管理它,使所有元素在操作后仍然存在? 我要求这些容器和分配器都没有设置不同内存资源的方法。因此我甚至想知道这是否可能。 我可以想象有几种方法可以做到这一点,但没有一种看起来很地道。实际上,它们看起来都像是绕过API中的漏洞的一种棘手的方法


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

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

Uhm。使用不同的内存资源移动分配器不会将其分配给我要移动的分配器?我的意思是:vec=std::prm::vector{other_resource};。是的,如果vec不是空的,我会遇到问题,但我不敢相信没有办法做到这一点。分配器不会在分配时传播。事实上,分配器本身有一个已删除的赋值运算符,因此您不能意外地分配它。对。忘了。因此,我甚至不能用默认分配器初始化它,以后再分配正确的分配器,不管它对我的应用程序意味着什么。不幸的是,在我看来,这是标准模板库提供的分配器无用性的又一步-