次のような関数があるとします。
MyClass &MyFunction(void)
{
static MyClass *ptr = 0;
if (ptr == 0)
ptr = new MyClass;
return MyClass;
}
問題はプログラムの終了時です。ptr 変数が無効になることはありますか (つまり、その ptr の内容は終了プロセスによってクリーンアップされます)。この関数が漏れていることは承知していますが、簡単にするための例にすぎません。
同じ質問は、ポインター以外の他のプリミティブにも当てはまります。静的な整数を持っている場合、その整数の値は常に終了まで持続しますか、それとも静的な破棄順序の問題により可変ですか?
編集:
明確にするために、静的ポインター (または int や float などの他のプリミティブ型) の内容が実際にどうなるのかを知りたいのですが、それが指しているメモリではありません。たとえば、ptr が、他の静的クラスのデストラクタでチェックしたいメモリ アドレスを指しているとします。ptr の内容が変更されない (つまり、静的破棄プロセス中にポインター値がクリーンアップされない) という事実を信頼できますか?
ありがとう、ジョー