私は彼が例around 37 minutes inを与えているハーブサッターのCppCon 2016話を、見てきた、このような何か:C++でコールバック地獄とは何ですか?なぜメモリがリークしますか?
void f(shared_ptr<T> & ptr)
{
obj.on_draw([=]() { ... }
}
彼はそれから言う、
私はそれがコールバック地獄と呼ばれる聞きましたガベージコレクトポインタ であることを起こるが、それは強力な所有者 - - 、あなたはコールバックを登録して どこに強力な所有者を持っているが、その後、あなたはそれを取り除くことはありません飽きない、 だけで永遠に、今そこに格納されますオブジェクトは決して消えません。
だから、彼はコールバック地獄と呼ばれ、オブジェクトをリークします。 しかし、私はこのコードに何が間違っているのか、それが漏れる理由はよく理解していません。誰かが私にこれを説明できますか?
私はstackoverflowで他の回答を見てきましたが、それらはすべて並行性に関するものです。ハーブサッターが話している何
は、メモリの所有権について話す必要があります。 Cにはガベージコレクタがないので、割り当てられたオブジェクトをいつ/誰が解放しなければならないかを知ることは難しいです。しかし、 'unique_ptr'は役に立ちます。 –
公開されている場合は、トークをリンクしてください。それが良いかどうか、プレゼンテーションのどのスライド#または何時を言うか。 –
@RawN:それは話題ではなく、サッター博士が誰かが答えを出すことなく、話全体を見つけて見ていないと言っていただけで十分ではありません。 –