宣言された変数は、ゼロ初期化、値初期化、またはデフォルト初期化にすることができます。
あなたの例では:
Info *p = new Info(); <------- Value Initialization
Info *p = new Info; <------- Default Initialization
C++03標準8.5/5は、それぞれを適切に定義します。
タイプTのオブジェクトをゼロ初期化するということは、次のことを意味します。
— Tがスカラータイプ(3.9)の場合、オブジェクトはTに変換された0(ゼロ)の値に設定されます。
— Tが非ユニオンクラスタイプの場合、各非静的データメンバーと各基本クラスサブオブジェクト
はゼロで初期化されます。
— Tが共用体型の場合、オブジェクトの最初の名前付きデータメンバーはゼロで初期化されます。
— Tが配列型の場合、各要素はゼロで初期化されます。
— Tが参照型の場合、初期化は実行されません。
タイプTのオブジェクトをデフォルトで初期化
するということは、次のことを意味します
。— Tが非PODクラスタイプの場合(9節)、Tのデフォルトコンストラクターが呼び出されます(Tにアクセス可能なデフォルトコンストラクターがない場合、初期化の形式が正しくありません)。
— Tが配列型の場合、各要素はデフォルトで初期化されます。
—それ以外の場合、オブジェクトはゼロで初期化されます。
タイプTのオブジェクトを値初期化
するということは、次のことを意味します
。— Tがユーザー宣言コンストラクター(12.1)を持つクラスタイプ(9節)の場合、Tのデフォルトコンストラクターが呼び出されます(Tの場合、初期化は不正な形式になります)アクセス可能なデフォルトコンストラクタはありません);
— Tがユーザー宣言コンストラクターのない非ユニオンクラスタイプである場合、Tのすべての非静的データメンバーと基本クラスコンポーネントは値で初期化されます。
— Tが配列型の場合、各要素は値で初期化されます。
—それ以外の場合、オブジェクトはゼロで初期化されます