ノードを通過するとき、ノード ポインターを所有する必要はありません。つまり、
ここ=ここ->次;
ここが 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