将unique_ptr的映射移动到unique_ptr的const映射中

时间:2014-08-21 07:40:52

标签: c++ c++11 move-semantics unique-ptr

我知道以下示例有效:

#include <memory>
#include <map>

using namespace std;

map<int, unique_ptr<int> > mapCreator () {
  map<int, unique_ptr<int> > smallMap;
  for (int i = 0; i < 10; i++) {
    unique_ptr<int> ptr(new int(10));
    smallMap.insert(make_pair(
      i,
      std::move(ptr)
    ));
  }
  return smallMap;
};

class mapContainer {
 public:
  mapContainer(map<int, unique_ptr<int> > smallMap) {
    std::move(smallMap.begin(), smallMap.end(), std::inserter(smallMap_, smallMap_.begin()));
  }     
 private:
  map<int, unique_ptr<int> > smallMap_;
};

int main() {
  mapContainer container(mapCreator());
}

但是,如果我想强制smallMap_

,我该怎么办?
const map<int, unique_ptr<int> > smallMap_;

请帮忙,我已经尝试了所知的所有移动组合。

1 个答案:

答案 0 :(得分:3)

只做

class mapContainer
{
public:
    mapContainer(map<int, unique_ptr<int> > smallMap) :
        smallMap_(std::move(smallMap))
    {
    }
 private:
    const map<int, unique_ptr<int> > smallMap_;
};

Live example