當你經過的節點,你不需要把自己的節點指針,這意味着
這裏=這裏 - >下一步;
是不正確,如果這裏是一個的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
我不是致力於節點負責在未來,我只是想弄清楚如何原始指針和智能指針,這之間的轉換似乎是最直接的。任何建議的替代方案? –
嗯,我想使用shared_ptr會更加昂貴,但更容易處理。分離節點將非常容易。話雖如此,一個優化的列表實現將與原始指針和自定義節點分配。 – Klaim
不要忘了'std :: swap'。 –