I am aware you cannot use an initialiser list for an array. However I have heard of ways that you can set an array of pointers to NULL in a way that is similar to an initialiser list.
I am not certain how this is done. I have heard that a pointer is set to NULL by default, though I do not know if this is guaranteed/ in the C++ standard. I am also not sure if initialising through the new operator compared to normal allocation can make a difference too.
Edit: I mean to do this in a header file/constructor initialisation list. I do not want to put it in the constructor, and I do not want to use a Vector.
I am not certain how this is done. I have heard that a pointer is set to NULL by default, though I do not know if this is guaranteed/ in the C++ standard.
It is not guaranteed by the C++ standard. Built in types ( like pointers ) are filled with garbage unless set otherwise.
I am also not sure if initialising through the new operator compared to normal allocation can make a difference too.
What do you mean by "normal allocation" ? If you're talking about an automatic variable, then you can do this:
MyType * pointers[2] = {}
and the pointers should be initialized to NULL.
In order to set an array of pointers to nulls in constructor initializer list, you can use the
()
initializerUnfortunately, in the current version of the language the
()
initializer is the only initializer that you can use with an array member in the constructor initializer list. But apparently this is what you need in your case.The
()
has the same effect on arrays allocated withnew[]
In other contexts you can use the
{}
aggregate initializer to achieve the same effectNote that there's absolutely no need to squeeze a
0
or aNULL
between the{}
. The empty pair of{}
will do just fine.If you have a member array then there is no way to initialize, unless it's a static member. If the array isn't a static member then you'll have to fill it inside the constructor's body.
That said, chances are you're really better off using a
std::vector
. Other than for technical reasons such as unavailability of a standard STL for your platform, or the slightly lesser performance astd::vector
is better than an array by any and all criteria. If performance is the issue then make sure you profiled and know by numbers that it is an issue.You can switch from array to
std::vector
and useThe values will be initialized by
NULL
s automatically. This is the preferred C++ way.Update: Since C++11, there is one more way: using
This behaves more like a corrected version of C-style array (in particular, avoids dynamic allocations), carries its size around and doesn't decay to a pointer. The size, however, needs to be known at compile time.
Normally an array will not be initialised by default, but if you initialise one or more elements explicitly then any remaining elements will be automatically initialised to 0. Since 0 and
NULL
are equivalent you can therefore initialise an array of pointers toNULL
like this: