czytałem QT standardy kodowania docs i natknął się następujący akapit:C++ statyczny globalny non-POD: teoria i praktyka
niczego, co ma konstruktora lub musi uruchomić kod zostać zainicjowana nie może być używany jako obiekt globalny w kodzie biblioteki, ponieważ jest niezdefiniowany, gdy ten konstruktor/kod zostanie uruchomiony (przy pierwszym użyciu, przy ładowaniu biblioteki, przed głównym() lub wcale nie jest). Nawet jeśli czas inicjalizacji jest zdefiniowany dla bibliotek współdzielonych, będziesz mieć kłopoty z przeniesieniem kodu w wtyczce lub jeśli biblioteka zostanie skompilowana statycznie.
Wiem, co mówi theory, ale nie rozumiem części "wcale nie". Czasami używam globalnej statystyki statycznej non-POD (np. QString) i nigdy nie zdarzyło mi się, że mogą nie zostać zainicjowane ... Czy jest to specyficzne dla współużytkowanych obiektów/bibliotek DLL? Czy dzieje się tak tylko w przypadku uszkodzonych kompilatorów?
Co sądzisz o tej zasadzie?
Twój QString może nie zostać zainicjowany, jeśli ich nie używasz. Ale jeśli ich użyjesz, zostaną zainicjowane. Nawet jeśli jest to tuż przed użyciem (tj. Tuż przed przywołaniem matury na obiekcie). –