gpt4 book ai didi

c++ - 使用 unique_ptr<> 实现列表?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:25:40 26 4
gpt4 key购买 nike

据我了解,unique_ptr 表示专有所有权。单向链表似乎适合这种情况,每个节点都拥有下一个节点,例如(伪代码警报)

class node{
public:
unique_ptr<node> next;
int value;
};

但我不明白如何执行像遍历列表这样的操作,我习惯这样做

here=here->next;

如何使用 unique_ptr 实现数据结构?它们是这项工作的正确工具吗?

最佳答案

当你遍历节点时,你不需要拥有节点指针,这意味着

here=here->next;

如果这里是 unique_ptr 则不正确。拥有一个对象意味着“对其生死负责”,这意味着所有者是拥有将销毁该对象的代码的人。如果您使用其他定义的拥有,那么它不是 unique_ptr 的意思。

在列表节点代码中,假设每个节点负责下一个节点(如果销毁一个节点,则所有下一个节点也将被销毁)。它可以是有效的行为,这取决于您的需求,只要确保它是您真正想要的即可。

你想要的是读取指针而不拥有它。当前这样做的最佳做法是使用原始指针,向查看此代码的其他开发人员指示“使用但不拥有”类型的用法(unique_ptr 表示“如果我死了,指向的对象也会死”):

node* here = nullptr; // it will not own the pointed nodes (don't call delete with this pointer)
here = &first_node(); // assuming first_node() returns a reference to the first node
here = here->next.get(); // to get the next node without owning it: use get() - true in all smart pointers interface

关于c++ - 使用 unique_ptr<> 实现列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com