私はこのリンクから知ってい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_ptr
shared_ptr