ここには 2 つの解決策があります。
- 削除しないでください(C++ を使用している場合は、new と delete を使用しますよね? ;))。今日のほとんどすべての OS は、アプリケーションが終了すると、アプリケーションによって割り当てられたメモリを「解放」します。しかし、これは良い解決策ではありません。たとえば、メモリ リークを検出するのが難しくなります。
- ポインターを (メンバーとして) クラスにカプセル化し、このクラスを static の型として使用します。そうすれば、アプリケーションの最後にクラス デストラクタが呼び出されることがわかります。次に、デストラクタでデータを削除するだけで、作業は完了してきれいになります。それがRAIIの力です。
2 を実行することをお勧めします。これは非常にクリーンな方法です。
簡単な例を次に示します。これを行う代わりに
static Thing* things = new Thing(); // or whatever way to initialize, here or in a specific function
あなたはそれをします:
class ThingManager // or whatever name you like
{
public:
ThingManager( Thing* thing ) : m_thing( thing ) { }//or create it here? whatever solution suits your way of creating the data
~ThingManager() { delete m_thing; } // THAT's the important part!
Thing* instance() const { return m_thing; } // or whatever accessor you need, if you need one
private:
Thing* m_thing;
};
その後
static ManagedThing thing; // now i can access it via thing.instance()
プログラムが終了すると、静的変数 (ポインターではなくなります) は破棄され、そのためにデストラクタが呼び出されます。
これは、どのようにそれを行うことができるかのアイデアを提供するためだけに書かれています。