クラスQNetworkReplyのオブジェクトがあります。そのfinished()信号に接続されたスロットが(他のオブジェクトに)あります。信号は同期しています(デフォルトの信号)。スレッドは1つだけです。
ある時点で、両方のオブジェクトを削除したいと思います。これ以上の信号やそれらからの何かはありません。私は彼らがいなくなって欲しい。まあ、私は思った、私は使用します
delete obj1; delete obj2;
しかし、私は本当にできますか?〜QObjectの仕様は次のように述べています。
保留中のイベントが配信されるのを待っている間にQObjectを削除すると、クラッシュが発生する可能性があります。
「保留中のイベント」とは何ですか?それは、私が電話をかけている間delete
、配信される「保留中のイベント」がすでにいくつかあり、それらがクラッシュを引き起こす可能性があり、実際に存在するかどうかを確認できないことを意味しますか?
だから私が呼ぶとしましょう:
obj1->deleteLater(); obj2->deleteLater();
安全であるために。
しかし、私は本当に安全ですか?はdeleteLater
、制御がそこに到達したときにメインループで処理されるイベントを追加します。deleteLaterが処理される前に、メインループで処理されるのを待っている、保留中のイベント(シグナル)が存在する可能性はありますobj1
か?それは非常に残念なことです。「やや削除された」ステータスをチェックし、すべてのスロットの着信信号を無視するコードを書きたくありません。obj2