私はこのリンクから知っていstd::enable_shared_from_thisました。
しかし、以下のコードを読んだ後、いつ使用するかわかりません。
try {
Good not_so_good;
std::shared_ptr<Good> gp1 = not_so_good.getptr();
} catch(std::bad_weak_ptr& e) {
// undefined behavior (until C++17) and std::bad_weak_ptr thrown (since C++17)
std::cout << e.what() << '\n';
}
shared_ptrを呼び出す前に存在しないため、上記のコードは「あまり良くありません」getptr()。したがって、良いことは次のとおりです。
std::shared_ptr<Good> gp1 = std::make_shared<Good>(); // having a shared_ptr at the beginning
std::shared_ptr<Good> gp2 = gp1->getptr();
ただし、既にオブジェクトを持っている場合は、次のshared_ptrように単純にコーディングしてみませんか: std::shared_ptr<Good> gp2 = gp1;、つまり、まったく必要ないということですstd::enable_shared_from_this。
私の意見では、二重削除の問題std::enable_shared_from_thisを回避できるように、複数のshared_ptrオブジェクトが同じ制御ブロックを持っていることを確認するために使用します。しかし、最初にa を作成することを思い出さなければならない場合は、生のポインターを使用する代わりに、オブジェクトを使用して新しいオブジェクトを作成することを思い出してください。shared_ptrshared_ptr