【发布时间】:2022-01-24 10:28:50
【问题描述】:
如何更正将资源从现有的 unique_ptr 移动到在容器中创建的另一个? 我想将一些 unique_ptr 与来自另一个 unique_ptr 的资源放入容器中。或者可能将一个 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的成员是可移动的,因此MyClass将是可移动的。所以你会得到一个MyClass类型的新对象,我知道没有任何机制可以保留该对象并让它由地图而不是 unique_ptr 管理。
标签: c++ c++17 move unique-ptr emplace