質問: 前にコードを見ていた時にこのような記述がありました。 ``` Input & Input::GetInstance() { static Input instance; return instance; } ``` この関数を呼び出してInputを使う場合Inputのインスタンスがメモリ内にどんどん増えていくのでしょうか? そうである場合普通にInputの変数を宣言して使えばいいし、仮にそうでない場合(メモリ内には常に一つだけインスタンスが生成される状態)なら普通にstaticで使えばいいような気がします。 この記法をした際のメリット、デメリットありましたら教えてくださると幸いです。
回答: static宣言されたインスタンスは二回目以降に到達しても新規にメモリ確保をしません。(静的オブジェクトとして、スコープを外れても値を保持する) これはシングルトンと呼ばれるパターンに見られるメソッドです。シングルトンとはオブジェクトの数を1つ(または有限個)に制限するためのものです。これは、コンストラクタをprivate宣言することで実現できます。 コンストラクタがprivateなので、クラス外部からnew演算子経由でのオブジェクト作成が禁止されます。こうなると、クラス外部からオブジェクト作成するためには**「staticメソッドを経由して内部に入り、内部でオブジェクトを作って戻り値として返す」**という記述になります。 ご提示のソースは↑の太字の部分に当たるものだと思います。 なお、シングルトンはハードウェアリソースに直結する場合等に有効な記述です。