Aは、変数がゼロで初期化さ、値初期化またはデフォルトはを初期化することができます宣言。あなたの例で
:
Info *p = new Info(); <------- Value Initialization
Info *p = new Info; <------- Default Initialization
8.5/5、標準C++ 03が適切にそれぞれを定義:
タイプTのオブジェクトゼロ初期化には、意味:
を - Tがスカラー型(3.9)の場合、オブジェクトはTに変換された0(ゼロ)の値に設定されます。
- Tが非共用体クラスの型である場合、各非静的データメンバおよび各基本クラスの下位オブジェクト
はゼロで初期化されます。
- Tが共用体型の場合、オブジェクトの最初の名前付きデータメンバーはゼロで初期化されます。
- Tが配列型の場合、各要素はゼロで初期化されます。
- Tが参照型の場合、初期化は実行されません。
タイプTのオブジェクトデフォルト初期化する手段:
を - Tは、非PODクラス型(条項9)である場合、Tの既定のコンストラクタが呼び出され(及び 初期化が悪い形成されていますTにアクセス可能なデフォルトコンストラクタがない場合)。
- Tが配列型の場合、各要素はデフォルトで初期化されます。
- そうでない場合、オブジェクトはゼロで初期化されます。
タイプTのオブジェクト値初期化する手段:
を - Tは、ユーザー宣言コンストラクタ(12とクラスタイプ(条項9)である場合。1)、Tのデフォルトの コンストラクタが呼び出されます(Tにアクセス可能な デフォルトコンストラクタがない場合、初期化は不正です)。
- Tがユーザ宣言されたコンストラクタのない非共用体クラスの型である場合、Tのすべての非静的 データ・メンバーおよび基本クラス・コンポーネントが値で初期化されます。
- Tが配列型の場合、各要素は値で初期化されます。
- それ以外の場合は、オブジェクトはゼロで初期化されます。
[C++では次のフレーズは何を意味しますか?](http://stackoverflow.com/questions/1613341 /)、[C++ 03のdefault-initializeとvalue-initializeの違いは?](http://stackoverflow.com/questions/7084831/)。 – outis