有一个智能指针容器。您想通过所有权转移将它们写入另一个容器。但是当您尝试insertParameter
在循环内调用函数时,调用远程构造函数时会发生错误。
void Module::insertParameter(unique_ptr<Parameter> p)
{
some_list.append(move(p));
}
void Module::insertParameter(initializer_list<unique_ptr<Parameter>> plist)
{
for (auto &p : plist)
{
insertParameter(move(p));
}
}
实际上,如何组织智能指针在for循环范围内的移动?
initializer_list 有一个不好的特性——它会复制。如果您的数据仅用于移动,那么您就有问题了。人们在问类似的事情
https://stackoverflow.com/questions/8193102/initializer-list-and-move-semantics
也就是说,您的问题不在循环中,而在 initializer_list 中。
该怎么办?