Re: Threadsafe singletons
Matthias Hofmann wrote:
"kanze" <kanze@gabi-soft.fr> schrieb im Newsbeitrag
news:1154432716.097639.127800@b28g2000cwb.googlegroups.com...
What could happen? The only thing I can imagine is using
the char pointer to modify the string literal. This can be
fixed by using a pointer to a const char.
void
muckItUp()
{
char doh[] = "How long will I exist?" ;
Singleton::GetInstance().SetName( doh ) ;
}
I wouldn't like to use the singleton after a call to muckItUp.
I see. Would it make a difference if doh' were a pointer to a
char rather than an array, as follows?
char* doh = "Am I located on the stack?";
Obviously. The problem is one of object lifetime; using a char
pointer, instead of std::string, only works if the object
lifetime of the char const[] it points to is static (or strictly
speaking, at least until the next call to SetName. Anytime you
pass the address of a string literal, this condition is met.
David's example is probably more realistic of what will happen
in practice. The user will create the string in an std::string,
and then use c_str() to pass it to SetName.
--
James Kanze GABI Software
Conseils en informatique orient?e objet/
Beratung in objektorientierter Datenverarbeitung
9 place S?mard, 78210 St.-Cyr-l'?cole, France, +33 (0)1 30 23 00 34
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]