我知道以下示例有效:
#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_;
请帮忙,我已经尝试了所知的所有移动组合。
答案 0 :(得分:3)
只做
class mapContainer
{
public:
mapContainer(map<int, unique_ptr<int> > smallMap) :
smallMap_(std::move(smallMap))
{
}
private:
const map<int, unique_ptr<int> > smallMap_;
};