Mimochodem, ten jednoduchý on demand generátor na všechno rozhodně nestačí. Minimálně proto, že není thread-safe. A tazatel se ptal na thready, takže mu to nejspíš vadit bude.
Jiste ze to neni thread safe, protoze prirazeni ani { } si takovou extra namahu nedava.
To céčku je naozaj nutné kontrolovať, či statická premenná vo funkcii bola inicializovaná?
V C++ nie je, jednoducho to prebehne iba pri prvom volaní a platí to aj pre tú alokáciu pamäte.
A od C+11 je to aj thread-safe...
Pokud pisu zdrojak, pisu ho tak, abych nemusel poskytovat out-of-band informaci, jakou verzi standardu se na to ma prekladac divat.
U C++11 musite ale pouzit safe:: nebo tam plati nejake magicke pravidlo / vyjimka na kod podobny memu?
Nez jsem dopsal prispevek, tak se to zodpovedelo..
Pokud je ta statická proměnná ukazatel na dynamicky alokovaný objekt, tak je to nutné kontrolovat. V C++11 je thread safe tahle verze :
typ *single() {
static typ instance;
return &instance;
}
Protože thread safe je jen ta samotná inicializace statické proměnné.