我有这样的功能..。
unique_ptr<Node> test(unique_ptr<Node> &&node, string key)
{
if(!node)
{
return make_unique<Node>(key);
}
else
return node;
}如果节点为null,我希望创建一个节点,或者返回该节点。但它错误地说“使用已删除的函数'std::unique_ptr‘”。我做错了什么?
发布于 2017-03-25 21:23:51
问题在于调用函数的方式。但首先,您应该接受您的std::unique_ptr值,而不是r-引用。
然后,在调用函数时,需要对指针进行std::move():
// accept by value
std::unique_ptr<Node> test(std::unique_ptr<Node> node)
{
if(!node)
return std::make_unique<Node>();
return node;
}
int main()
{
auto n = std::make_unique<Node>();
n = test(std::move(n)); // move the pointer
}一个std::unique_ptr不能被复制,否则它不会是唯一的。你得把它们移开。
https://stackoverflow.com/questions/43021947
复制相似问题