Re: static array declaration in flyweight pattern
pauldepstein@att.net wrote:
The line Icon *FlyweightFactory::_icons[]; seems a strange definition
of an array. In the class Icon, this array is declared as having
dimension 5 but the definition doesn't specify the size.
This is allowed, since the compiler already knows the size.
The definition of the array also appears to be uninitialized.
Exactly.
In
particular, I would be interested to know if the static array
declaration ensures that all the int-pointer members of the array are
null pointers. They are either null pointers or uninitialized
pointers but which?
I would probably have written Icon *FlyweightFactory::_icons[] = {0,
0, 0, 0, 0};
While this is possible it introduces an implicit dependency on
MAX_ICONS. If MAX_ICONS is less than 5 you will get a compilation error.
Since POD types are automatically initialized to zero in case of an
incomplete initializer list
Icon *FlyweightFactory::_icons[] = {0};
would do the job as well.
but it's possible that the code does this anyway.
Not that I have noticed.
Do the int-pointers
initialize to 0 anyway even if this is not made explicit as I did?
No, their values are undefined. But since there is another variable
_numIcons which seems to store the valid part of _icons, this does not
result in undefined behavior.
Marcel