よくあることですが、「場合によります」。名前にふさわしいオペレーティング システムでは、プロセスが終了すると、プロセス内でローカルに使用されているすべてのメモリとその他のリソースが解放されます。あなたはそれについて心配する必要はありません。
ただし、シングルトンがそれ自体のプロセス (おそらくファイル、名前付きミューテックス、または同様のもの) の外部の有効期間を持つリソースを割り当てている場合は、適切なクリーンアップを検討する必要があります。
ここでRAIIがお手伝いします。次のようなシナリオがある場合:
class Tempfile
{
Tempfile() {}; // creates a temporary file
virtual ~Tempfile(); // close AND DELETE the temporary file
};
Tempfile &singleton()
{
static Tempfile t;
return t;
}
...その後、アプリケーションが終了しても、一時ファイルが閉じられて削除されることを安心できます。ただし、これはスレッドセーフではなく、オブジェクトの削除の順序が期待または要求と異なる場合があります。
ただし、シングルトンがこのように実装されている場合
Tempfile &singleton()
{
static Tempfile *t = NULL;
if (t == NULL)
t = new Tempfile();
return *t;
}
…では、状況が異なります。tempfile によって使用されるメモリは再利用されますが、デストラクタが呼び出されないため、ファイルは削除されません。