1) Nevetseges, hogy ezt cibalod ide. Egyfelol 10 eves a cikk, ma mar boven az osszes fordito figyelmeztet erre. Masreszt minden kezdo konyvben tisztazasra kerul, hogy mi a jo sorrend (segitek: Hatekony C++ 13. szakasz). Nem veletlenul adtak a GoTW cikkben 2/10-es difficulty-t a cikknek. Az ott szereplo pelda a C++ szabvany szerint undefined behaviour (mar akkor is az volt!!!). Vagy most akkor mit is kerunk szamon?
2) Ennek amugy mi koze is van a konstruktorban dobott kivetelekhez? Ja semmi.
Es egyebkent minden nyelv amelyik tamogatja a statikus adatok letrehozasat meg kell kuzdenie a statikus inicializacio sorrendjenek gondjaval. Konkretan legjobb tudomasom szerint a nyelvek nem csinalnak forditasi idoben analizist a jo inicializacio sorrendjerol. Alexandrescu (Modern C++ Design) 2001 kornyeken mar a velejeig kitrancsirozta ezt a kerdest, es o is csak hivatkozik egy meg korabbi cikkre ahol Scott Meyers adott olyan pofonegyszeru megoldast (Meyers-singleton, 1996), ami megtalalja a korrekt inicializacios sorrendet, *ha letezik olyan*. Ha pedig nem letezik olyan, akkor mit is kellene tenni (a c++ szabvany ezt megintcsak undefined behaviour-kent tartja szamon)?
Just for the log:
some_type &give_me_the_instance() {
static some_type the_instance = ....;
return the_instance;
}
Ezzel a konstrukcioval a statikusok inicializalasara automatikusan jo sorrend generalodik (ismetlem: ha van ilyen sorrend, mert nem mindig van).
Szoval eddig elohozakodtal egy 10 eves cikkel, ami mar igazabol akkor sem volt problema (a jogos kerdes a gotw cikkben az, hogy miert engedte at az egyik fordito a problemas kodot warning nelkul), ma meg plane nem az. Tovabba egy problemaval, amire eleg korrekt es jol mukodo megoldas van 18 eve...
Ne haragudj, nem a c++ a viccnyelv, hanem a te tudasod felszines.