为什么我无法将unique_ptr转换为赋值中的原始指针?

时间:2015-04-25 08:22:54

标签: c++ c++11 smart-pointers

在编写简单的二叉搜索树插件时,我在g ++ 4.7中遇到了编译错误

error: cannot convert ‘node_ptr {aka std::unique_ptr<node>}’ to ‘node*’ in assignment

代表node* n = root.get()函数中的行bst_insert。我不明白为什么?

struct node;

typedef std::unique_ptr<node> node_ptr;

struct node {
        node(int k) : key(k) {};
        int key;
        node_ptr left = nullptr;
        node_ptr right = nullptr;
};

void bst_insert(node_ptr& root, node_ptr z) {
    node* p = nullptr;
    node* n = root.get();
    while (n != nullptr) {
        p = n;
        n = z->key < n->key ? n->left : n->right;
    }
    if (p == nullptr)
        root = std::move(z);
    else if (z->key < p->key)
        p->left = std::move(z);
    else p->right = std::move(z);
}

1 个答案:

答案 0 :(得分:4)

n = z->key < n->key ? n->left : n->right;

这一行。 n->leftn->rightstd::unique_ptr,您正在尝试将唯一的ptr分配给原始指针。将该行更改为:

n = z->key < n->key ? n->left.get() : n->right.get();