我正在尝试使用方法设置unique_ptr的地图。
class A {
map<int, unique_ptr<B>> x;
public:
void setx(const map<int, unique_ptr<B>>& x) {this->x = x;} // <-- error
...
};
但是,我收到了这个错误。
'constexpr std::pair<_T1, _T2>::pair(const std::pair<_T1, _T2>&) [with _T1 = const int; _T2 = std::unique_ptr<ContextSummary>]' is implicitly deleted because the default definition would be ill-formed:
这项任务有什么问题?
答案 0 :(得分:4)
std::unique_ptr
不可复制,因此您无法复制包含std::map
的{{1}}。你可以移动它:
unique_ptrs
请注意,为了移动地图,您需要它不是void setx(map<int, unique_ptr<B>> x) {
this->x = std::move(x);
}
引用,否则您无法移动它。按值取值允许调用者使用临时值或移动左值。
现在,您可以使用这样的代码:
const
或者像这样,使用临时工具:
std::map<int, std::unique_ptr<B>> some_map = ...;
some_a.setx(std::move(some_map));
正如0x499602D2所指出的,您可以直接在构造函数中执行此操作:
some_a.setx({
{1, make_unique<B>(...)},
{2, make_unique<B>(...)}
});