views:

136

answers:

3

When I use new[] to create an array of my classes:

int count = 10;
A *arr = new A[count];

I see that it calls a default constructor of A count times. As a result arr has count initialized objects of type A. But if I use the same thing to construct an int array:

int *arr2 = new int[count];

it is not initialized. All values are something like -842150451 though default constructor of int assignes its value to 0.

Why is there so different behavior? Does a default constructor not called only for built-in types?

+3  A: 

Built-in types don't have a default constructor even taught they can in some cases receive a default value.

But in your case, new just allocates enough space in memory to store count int objects, ie. it allocates sizeof<int>*count.

Cedric H.
they have, but it must be invoked: ` int i();`
rubber boots
This is not a real constructor, but a way to initialize them...
Cedric H.
@rubber boots: `int i ();` does not initialize a varaible named `i`. It declares a function `i` returning an int. You may have meant `int i = int();`
James Curran
@James: In C++0x you can finally say what you mean: `int x{};` :)
FredOverflow
@James, oops - wtf did I write? Thanks for clearing this up. Wrong deduction from `int *i = new int();`. @Cerdic, Sorry for Posting BS.
rubber boots
A: 

int is not a class, it's a built in data type, therefore no constructor is called for it.

Hamid Nazari
+5  A: 

See the accepted answer to a very similar question. When you use new[] each element is initialized by the default constructor except when the type is a built-in type. Built-in types are left unitialized by default.

To have built-in type array default-initialized use

new int[size]();
sharptooth