別の質問に答えると、「最適ではない」ライフタイム管理でエラーが発生した自分の古いコードの一部を最適化する可能性があることに気づきました。
オブジェクトへのアクセス/有効期間が shared_ptr で制御されるアプリが少なくとも 1 つあります。この ptr は動的に割り当てられるため、ロックすることなく、別の *shared_ptr (したがって、新しい ptr によって管理される更新されたオブジェクト) に「原子的に」スワップ アウトできます。これは問題なく動作しているように見えますが、最後のスレッドがいつ終了するかわからないため、意図的に古い ptr をリークしています。
管理されている古いオブジェクトの dtor にある古い *shared_ptr を (おそらく) delete() できることに気付きました。作成時に *sharedPtr をマネージド オブジェクトのプライベート データ メンバーにロードして、dtor がそれを削除できるようにします。
誰かがこれを行ったことがありますか、またはなぜそれが安全ではないのかについて意見がありますか? 私はそれを試すことができましたが、非常に多くのマルチスレッドの「最適化」のように、私がそれを提供した後まで「機能しているように見える」のではないかと心配しています:(