小编use*_*212的帖子

使用 unique_ptrs 的基本前向列表

作为学习 C++ 的练习,我想使用原始指针和 unique_ptrs 构建自己的前向列表。使用原始指针,我有:

struct node_raw {
    node_raw(int data_, node_raw *next_) : data(data_), next(next_) {}
    int data;
    node_raw *next;
};
Run Code Online (Sandbox Code Playgroud)

然后我可以写这个

int main() {
    node_raw r1{1, nullptr};
    node_raw r2{2, &r1};
    node_raw r3{3, &r2};
}
Run Code Online (Sandbox Code Playgroud)

获取转发列表:r3 -> r2 -> r1。

现在我想使用 unique_ptrs 做同样的事情。

struct node_unique {
    node_unique(int data_, std::unique_ptr<node_unique> next_) 
        : data(data_), next(std::move(next_)) {}
    int data;
    std::unique_ptr<node_unique> next;
};
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的客户端代码:

int main() {
    node_unique u1{1, nullptr};
    node_unique u2{2, std::make_unique<node_unique>(std::move(u1))};
    node_unique u3{3, std::make_unique<node_unique>(std::move(u2))};
}
Run Code Online (Sandbox Code Playgroud)

这给出了u3.next->data = 2,所以它似乎有效。但这是对的吗?为什么我需要std::move两次才能创建一个新节点? …

c++ move unique-ptr c++14

2
推荐指数
1
解决办法
190
查看次数

标签 统计

c++ ×1

c++14 ×1

move ×1

unique-ptr ×1