C++ 实施具有唯一性的列表\u ptr<>;?

C++ 实施具有唯一性的列表\u ptr<>;?,c++,c++11,smart-pointers,C++,C++11,Smart Pointers,据我理解,unique\u ptr表示专有所有权。单链接列表似乎适合这种情况,每个节点拥有下一个节点,如(psedoocode alert) 如何使用unique\ptr实现数据结构?它们是作业的正确工具吗?当您遍历节点时,不需要拥有节点指针,这意味着 这里=这里->下一步 如果此处有唯一的\u ptr,则不正确。 拥有一个物体意味着“对它的生命和死亡负责”,这意味着拥有者拥有摧毁该物体的代码。如果你使用了另一个拥有的定义,那么它就不是unique_ptr的意思 在您的列表节点代码中,您假设每个

据我理解,
unique\u ptr
表示专有所有权。单链接列表似乎适合这种情况,每个节点拥有下一个节点,如(psedoocode alert)


如何使用
unique\ptr
实现数据结构?它们是作业的正确工具吗?

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

这里=这里->下一步

如果此处有唯一的\u ptr,则不正确。 拥有一个物体意味着“对它的生命和死亡负责”,这意味着拥有者拥有摧毁该物体的代码。如果你使用了另一个拥有的定义,那么它就不是unique_ptr的意思

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

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


我不想让节点负责下一个,我只是想弄清楚如何在原始指针和智能指针之间进行转换,这似乎是最直接的。关于替代方案有什么建议吗?我想使用共享的ptr会更昂贵,但更容易处理。分离节点将非常容易。也就是说,优化的列表实现可以通过原始指针和自定义节点分配来实现。不要忘记
std::swap
@AlexanderDuchene:智能指针的全部意义在于它们定义了谁对它们“负责”。如果您想让其他对象对它们负责,则不应使用智能指针。
class node{
public:
      unique_ptr<node> next;
      int value;
};
here=here->next;
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