クラスの定義とnewによるオブジェクトの生成,メンバ関数 |
使用ソースコードをダウンロードして参考にして下さい。
●適切な初期化
変数のライフタイムの第2ステージは,インスタンス値の適切な初期化です(Fig. 2.1-(2))。適切な初期化をしないと,値が不確定な状態でインスタンスを
参照してしまったりして,思いがけない誤動作の原因になります。
List 2.1のC言語プログラムでは,変数宣言によって静的なメモリ確保を行うと同時に初期化も行っています(12,13行目)。これはC++で書いたList 2.2で
も同様です。ただし,C++では空ポインタとして整数定数0を使う部分が異なっているだけです。なぜC++ではNULLを使わないのか。それは,C++の規格は
プリプロセッサへの依存ができるだけ少なくなるように設計されているからです。依然としてマクロ定数NULLは使用可能ですが,C++ではできるだけ空ポインタ
を用いたいときには,整数定数0を使ってください。
さて,話しを戻しましょう。このようにメモリの確保と同時に初期化することは,不確定な変数値の参照などのミスが起こりにくくるするためには必要不可欠です。
しかし,C言語では動的にメモリ領域を確保する場合,初期化を同時に行うことはできません。List 2.1では動的メモリ確保を15行目で,初期化を21,22行目で
行っています。では,C++ではこの点はどうなっているでしょうか。List 2.2のC++プログラムでは紹介していないのですが,実はC++では非常にうまい方法で,
動的なメモリ確保と初期化を同時に行うことが可能になっています。その方法のアイディアは,次のステージの問題点を詳細に検討していく過程で得ることが
できます。