如何更正将资源从已存在的unique_ptr移动到容器中创建的另一个unique_pr?我想用来自另一个unique_ptr的资源将某个unique_pr放入容器中。或者可以将一个unique_ptr从一个容器移动到另一个容器。
这里有一些创建代码:
#include <memory>
#include <map>
#include <string>
struct MyClass
{
std::string s;
};
int main(int argc, char* argv[])
{
std::map<std::string, MyClass> container;
std::unique_ptr<MyClass> tmp = std::make_unique<MyClass>();
tmp->s = "test string";
auto result = container.emplace(std::piecewise_construct,
std::make_tuple("test"),
std::make_tuple(std::move(tmp))
);
return 0;
}
您的地图包含MyClass
,但您正试图将std::unique_ptr<MyClass>
移动到其中。
您需要从std::unique_ptr
中获取实例并移动它。
std::make_tuple(std::move(*tmp))
^___ Dereference the unique_ptr