質問: GetMyClass(true); return 0; } ``` ### 質問 上記ソースコードで、GetMyClass()をコール、trueの場合にコンスラクタをコール、インスタンスを取得していますが、 GetMyClass()をコールした時点でMyClassを使用する為、コンストラクタが実行されるのではないのでしょうか? ### 補足情報(言語/FW/ツール等のバージョンなど) C++について勉強中の為、上記ソースコードに文法エラー等がありましたら申し訳ありません。 ご教授、お願いいたします。
回答: はい。クラスに属するインスタンス生成をnew演算子で実行しているので、コンストラクタが呼び出されます。 が、当該コードは少し特別なものです。また、多分コンパイル通りません(未確認)。おそらく、当該コードはSingletonと呼ばれるデザインパターンのものを意図したものでしょう。ご覧の通り、このコンストラクタの中身がありません。つまり、**「インスタンス生成時にコンストラクタが呼び出される」ということはここでは重要ではありません。** このコンストラクタの重要なところは**privateメソッドである**ことです。これはクラスの外部において、当該インスタンスのnewを文法レベルで禁止する記法となります。従って、クラス外部から可能なことは**staticフィールド、staticメソッドへのアクセス**のみとなります。つまり、**getMyClassメソッドはstaticでなければなりません。** なお、Singletonクラスは性質上、**インスタンス生成時に必ずそのクラスのstaticメソッドを経由する**ことになります。このため、インスタンス生成に大きな制約を作ることができ、管理を用意とすることが趣旨とされています。(名前の通り、インスタンスを一つしか作らせないように使うことが多い。例えば、ハードウェアと直結するようなインスタンスについては複数存在する意味がないため)