2

boost::shared_ptr<>C++に関する質問があります。現在、リストのアイテムをスマートに削除したいと考えています。

  • アイテムが使用中の場合は、何もせず、後で削除します
  • アイテムが使用されていない場合は、削除します

これは私のプログラムに必要な動作です。

std::list<boost::shared_ptr<object> >削除/消去機能により実際のオブジェクトが削除され、shared_ptr<>したがって実際のオブジェクトが削除されるため、それを適切に行う方法を本当に考えています。

だから私は最終的にこの解決策を思いつきました: a を使用し、std::list<object*>から継承objectboost::enable_shared_from_this<>ます。そうすれば、誰かがリストの項目を使用する必要がある場合、私はそれらにobject->shared_from_this().

私の質問は次のとおりです。

  • これは望ましい動作を尊重しますか?
  • boost::shared_ptr<>関連先shared_from_this()は、リスト内のオブジェクトへの参照を考慮していますか?

私の質問が十分に明確であり、誰かが私を助けてくれることを願っています. リストでのスマート ポインターの適切な使用は、私が使用できるようにしたいものです。

ありがとうございました

4

1 に答える 1

4

ashared_ptrを削除しても、他の場所で使用されていない限り、実際のオブジェクトは削除されません。それが を使用することの要点shared_ptrです。

たとえば、リストの 1 つの要素を取得し、それをコピーして別の関数に渡した後、その要素をリストから削除した場合、実際のオブジェクトはまだ別の場所で参照されているため、削除されません。

于 2012-10-20T08:46:10.617 に答える