c++17更正容器中unique_ptr之间的资源移动



如何更正将资源从已存在的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

最新更新