我有这样的功能..
unique_ptr<Node> test(unique_ptr<Node> &&node, string key)
{
if(!node)
{
return make_unique<Node>(key);
}
else
return node;
}
如果节点为null,我想创建一个节点,或者返回节点。但它错误地说&#34;使用已删除的功能&#39; std :: unique_ptr&#39; &#34 ;.我做错了什么?
答案 0 :(得分:4)
问题在于您调用该函数的方式。但首先,您应该接受std::unique_ptr
的值,而不是 r-reference 。
然后在调用函数时需要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
,否则它不会是唯一的。你必须移动他们。