What does "new int(100)" do?
Possible Duplicate:
is this a variable or function
I mistakenly used something like:
int *arr = new int(100);
and it passes compile, but I knew this is wrong. It should be
int *arr = new int[100];
What does the compiler think it is when I wrote the wrong one?
The first line allocates a single int
and initializes it to 100
. Think of the int(100)
as a constructor call.
Since this is a scalar allocation, trying to access arr[1]
or to free the memory using delete[]
would lead to undefined behaviour.
Wikipedia new(C++) quote:
int *p_scalar = new int(5); //allocates an integer, set to 5. (same syntax as constructors)
int *p_array = new int[5]; //allocates an array of 5 adjacent integers. (undefined values)
UPDATE
In the current Wikipedia article new
and delete
(C++) the example is removed.
Additionally here's the less intuitive but fully reliable C++ reference for new
and new[]
.
It allocates one object of type int
and initialized it to value 100
.
A lot of people doesn't know that you can pass an initializer to new
, there's a particular idiom that should be made more widely known so as to avoid using memset
:
new int[100]();
This will allocate an array of int
and zero-initialize its elements.
Also, you shouldn't be using an array version of new
. Ever. There's std::vector
for that purpose.