Re: static array declaration in flyweight pattern
On May 31, 9:36 pm, Marcel M=FCller <news.5.ma...@spamgourmet.com>
wrote:
pauldepst...@att.net wrote:
The line Icon *FlyweightFactory::_icons[]; seems a strange definitio=
n
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
Thanks, Marcel.
I have two questions. I realise that POD types are automatically
initialized to 0 in the case of an uninitialized list but does this
apply here? I incorrectly said that the array holds members of type
int*. Is this a POD type? I didn't think so.
However, the array actually holds members of type Icon* where Icon is
another class. So I don't think the initialization trick you mention
holds, or does it?
I suppose my questions are:
1) Does the initialization trick Type LargeArray[] = {0}; work
when Type is the int* type?
2) Does the same initialization trick work when Type is the
FairlyComplexClass* type?
Many thanks again for your help?
Paul Epstein