c ++ 14 unique_ptr并使unique_ptr错误使用已删除的函数' std :: unique-ptr'

时间:2017-03-25 21:05:36

标签: c++ pointers c++14 unique-ptr

我有这样的功能..

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 ;.我做错了什么?

1 个答案:

答案 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,否则它不会是唯一的。你必须移动他们。