私は、定期的に(newを使用して)作成および破棄されるコントローラーオブジェクトを内部的に持つC++アプリに取り組んでいます。これらのコントローラーは、自分自身を別のオブジェクト (controllerSupervisor と呼びましょう) に登録し、破棄されたときに自分自身を登録解除する必要があります。
私が現在直面している問題は、アプリケーションを終了したときに発生しています。破壊の順序は決定論的ではないため、コントローラー自体の (一部の) 前に単一の controllerSupervisor インスタンスが破壊され、それらが unregister メソッドを呼び出したときに発生します。それらのデストラクタは、すでに破壊されたオブジェクトに対して行います。
これまでに私が思いついた唯一のアイデア (大きな風邪をひいているので、これはあまり意味がないかもしれません) は、controllerSupervisor をスタック上のグローバル変数としてではなく、ヒープ上に (つまり new を使用して) 持つことです。ただし、その場合、削除する場所がありません(これはすべてサードパーティの種類のライブラリにあります)。
可能なオプションについてのヒント/提案をいただければ幸いです。