JavaのGCの概念と同様に、オブジェクトがもう何かによって参照されていない場合、オブジェクトはGC用にマークされます。unique_ptrは参照されないと自動的に破壊されますか?
unique_ptrはこれと同様に動作しますか?
私はノードが左/右std::unique_ptr<BSTNode>
を含むデータ構造(ツリー)を持っているとします。もし私がval
を含むBSTNode
の親に行き、nullptrを左か右の子フィールド(std::unique_ptr<BSTNode>
にval
を含む)に割り当てるなら、スマートポインタは自己破壊するでしょうか?remove(std::unique_ptr<BSTNode>& root, int val)
がありますか?
また、reset
のスマートポインタも削除機能の中に入れる必要がありますか?この質問は主に私が理解していない範囲の問題です。
ああ、私は、スマートポインタが次に範囲を外し、最終的には(それが指しているものを使って)破壊されるのを見ますか?スマートポインタが使用されていないことをどのように知っているかは分かりません。つまり、スマートポインタがnullptrで置き換えられたとすると、それを指し示すものを破棄することはありません。 – Naz
@ Nazスマートポインタは、 "使用されているかどうか"を知りません。 – immibis
unique_ptrは参照カウントされません(shared_ptrと同じです)。そのため、あなたはそれを任意に割り当てることができません(所有権を移すためにstd :: moveを使用する必要があります)。範囲外になると、それが指していたものはすべて破壊されます。もちろん、リセットを呼び出しても同じ効果が得られます(指していたものが破壊されます)。 – Robinson