如何更改智能指针的指示

时间:2016-12-30 22:24:01

标签: c++ smart-pointers

我想根据智能指针创建自己的列表。 我想要一个我可以在列表中添加值的函数,但是我不知道如何在传递给function的对象中更改变量next的值以指向新创建的对象。有人有想法吗?

#include <iostream>
#include <memory>

struct node
{
    int value;
    std::unique_ptr<node> next;

    node() {
        value = 0;
        next = nullptr;
    }
};

void add(std::unique_ptr<node> &w, int liczba)
{
    std::unique_ptr<node> new_list_node{ new node };
}

int main()
{
    std::unique_ptr<node> list_node{ new node };
    add(list_node, 1);
    return 0;
}

1 个答案:

答案 0 :(得分:1)

只需分配

void add(std::unique_ptr<node> &w, int liczba)
{
    std::unique_ptr<node> new_list_node{ new node };
    w->next = std::move(new_list_node);
}

或者更好的是,对于c ++ 14

void add(std::unique_ptr<node> &w, int liczba)
{
    w->next = std::make_unique<node>();
}

您只需要确保为next分配一个右值,或者使用std::move

将一个lvlaue转换为右值引用