C++ 如何更改地图';内存资源

C++ 如何更改地图';内存资源,c++,memory-management,c++17,dynamic-memory-allocation,C++,Memory Management,C++17,Dynamic Memory Allocation,在自定义容器中更改地图的内存资源时遇到问题。 似乎我既不能更改映射的分配器,也不能使用自定义内存资源创建新映射 #include <iostream> #include <memory_resource> #include <map> using Map = std::pmr::map<const std::string, int>; class custom_resource : public std::pmr::memory_resour

在自定义容器中更改地图的内存资源时遇到问题。 似乎我既不能更改映射的分配器,也不能使用自定义内存资源创建新映射

#include <iostream>
#include <memory_resource>
#include <map>


using Map = std::pmr::map<const std::string, int>;

class custom_resource : public std::pmr::memory_resource {

    public:

    void* do_allocate(std::size_t bytes, std::size_t alignment) override {
        std::cout << "Using custom resource" << std::endl;
        return std::pmr::get_default_resource()->allocate(bytes, alignment);
    }

    void do_deallocate(void* p, std::size_t bytes, std::size_t alignment) override {
    }

    bool do_is_equal(const std::pmr::memory_resource& other) const noexcept override {
        return false;    
    }
};

struct MyContainer {

  void Reset(std::pmr::memory_resource &resource)
  {
      map_ = Map{&resource};
  }

  void AddItem(std::string k) {
      map_[k] = 1;
  }

    std::pmr::memory_resource* default_resource = std::pmr::get_default_resource();
    // custom_resource custom{}; // uncomment this and next line to see it work
    // Map map_{&custom};
    Map map_{default_resource};
};


int main() {

    MyContainer container{};
    container.AddItem("a"); // no output expected

    custom_resource custom{};
    container.Reset(custom);

    container.AddItem("b"); // output expected

    return 0;
}
#包括
#包括
#包括
使用Map=std::pmr::Map;
类自定义资源:公共std::pmr::内存资源{
公众:
void*do_分配(std::size_t字节,std::size_t对齐)覆盖{

std::cout构建容器后,您无法更改容器的分配器。即使是
多态分配器
的内存资源也无法在构建容器后更改。因此,您想要的并不是真正可行的;您需要知道容器在构建时将使用什么内存资源,也就是说在销毁之前将使用的分配器+资源


在某些情况下,您可以将新的分配器复制/移动/交换到容器中,但
polymorphic_allocator
不允许所有这些分配器。

谢谢,我接受在构造后无法更改它。但我甚至无法获得使用新资源构造的新分配器。我猜是因为
=Map{&resource}
调用赋值副本构造函数或类似的东西?如果我将映射更改为一个
唯一的\u ptr
,那么我会让它工作。