New []を使用してクラスの配列を作成すると、次のようになります。
int count = 10;
A *arr = new A[count];
A
count
回のデフォルトコンストラクターを呼び出すことがわかります。その結果、arr
にはタイプcount
のA
初期化オブジェクトがあります。しかし、同じものを使用してint配列を作成すると、次のようになります。
int *arr2 = new int[count];
初期化されていません。 intのデフォルトコンストラクタはその値を-842150451
に割り当てますが、すべての値は0
のようなものです。
なぜそんなに異なる振る舞いがあるのですか?デフォルトのコンストラクターは、組み込み型に対してのみ呼び出されませんか?
組み込み型には、場合によってはデフォルト値を受け取ることができますが、デフォルトのコンストラクターはありません。
しかし、あなたの場合、new
は、count
int
オブジェクトを格納するのに十分なスペースをメモリに割り当てるだけです。 sizeof<int>*count
を割り当てます。
int
はクラスではなく、組み込みのデータ型であるため、コンストラクターは呼び出されません。