16
Vývoj / Re:Lifetime static/global/heap-allocated objektu v C++
« kdy: 02. 08. 2022, 13:30:56 »Pokud je ta statická proměnná ukazatel na dynamicky alokovaný objekt, tak je to nutné kontrolovat. V C++11 je thread safe tahle verze :Ja vedel ze C++ je slepa cestajen si hezky onanujte, vy uber-programatori.
Na vse ostatni staci takovy jednodychy on-demand generator:Citacetyp *single() {
static typ *instance;
if (!instance) instance = &new typ();
return instance;
}
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...
Citace
typ *single() {Protože thread safe je jen ta samotná inicializace statické proměnné.
static typ instance;
return &instance;
}
Spíš jde o to tu proměnnou "lazy" zinicializovat až když je opravdu potřeba, statická inicializace v C++ je tak trochu nepředvídatelná a spoláhat se na ni je cesta do pekel - proto bych vyhodil všechny globals a měl jen jeden - nějaký DI context nebo aplikační kontext, atd... popřípadě nemít ani ten a předávat ten kontext. Asi záleží na tom jak je kód na kterém tazatel děla starý - obvykle starší code-base má hodně globálních proměnných a něco s tím udělat by bylo na roky práce...Globální proměnné jsou problematické, ale statická proměnná uvnitř funkce je v pohodě. Ta se zinicializuje ve chvíli, kdy se ta funkce poprvé zavolá.
jen si hezky onanujte, vy uber-programatori.