複数回実行される関数があるとします。関数には以下のコードが含まれます。
static int *hello = new int;
hello
最初の実行時にのみ割り当てられますか?
はい、一度だけ割り当てられます。
しかし、別のことを提案させてください。次のような機能があるとします。
int* get_static_hello() {
static int* value = new int;
return value;
}
さて、あなたは次のことを非常にうまく行うことができます(100%正しいです):
int* get_static_hello() {
static int value;
return &value;
}
はい、一度だけ割り当てられます。
関数内で静的変数を使用する際の注意事項:
関数が含まれるクラスのすべてのインスタンスは、この変数を共有します。すべてのインスタンスで同じになり、1 つが変更されると、すべてが変更されます。
このクラスをスレッド化すると、静的変数へのアクセスはスレッドセーフになりません。
技術的には、プログラムの開始時に int が割り当てられます。関数が呼び出されても変更されません。変数は関数内でのみ可視であるという事実を除けば、ファイル レベルで static を宣言するのとまったく同じです。