std::enable_shared_from_this から派生したクラスがあります。すべてのクラス オブジェクトは共有ポインターによって管理されるため、それらを指す共有ポインターがなくなると自動的に破棄されます。
プログラムのデータ構造からいくつかの共有ポインタを削除するクラス メソッドがあり、「これ」、つまりクラス メソッドが呼び出されたオブジェクトへのすべての共有ポインタを削除するリスクがあります。
問題は、実際にすべてのポインターが削除された場合、メソッドの実行中にオブジェクトが破棄され、「this」ポインターが単に無効になる可能性があるかどうかです。それが起こらないようにしたい場合は、システムを信頼できますか、それともメソッド内で "this" に shared_ptr を作成して、処理が完了するまでオブジェクトを存続させる必要がありますか? (そして、ポインターがなくなったら、メソッドの実行が終了したら破棄しても問題ありません)
例:
class SharedObj : public std::enable_shared_from_this<SharedObj>
{
/* ... */
void do_something(SharedObj& a, SharedObj& b);
std::shared_ptr<SharedObj> child;
};
void SharedObj::do_something(SharedObj& a, SharedObj &b)
{
/* ... */
a.remove_child();
b.remove_child();
}
a と b だけが "this" を指す shared_ptr を持っている場合、2 つの remove_child() 行の後には "this" を指す共有ポインターがないため、基本的には自動的に破棄されるはずです。