Zeitpunkt der Inline-Instanziierung statischer C++17-Mitglieder: Verzögerte Instanziierung oder vor main()?
Posted: 13 Jan 2025, 16:50
Ich definiere ein statisches Inline-Datenelement in einer C++17-Klasse ().
Ich habe zwei Fragen:
1)Es scheint, dass gSharedData instanziiert wurde bevor main() beginnt wie ( Mitglied) und ist keine verzögerte Initialisierung (erste Verwendung von Idiom). Der folgende Code bestätigt dies. Ist dies bei statischen Inline-Variablen immer der Fall?
2)In einem Projekt, an dem ich arbeite (eine große Codebasis mit gemeinsam genutzten Bibliotheken), das dem folgenden Code ähnelt, habe ich Im Gegensatz zur Ausgabe des folgenden Codes beobachte ich mehrere Konstruktoraufrufe von verschiedenen Threads, wobei jeder eine andere Adresse ausgibt – was darauf hindeutet, dass mehr als eine Instanz erstellt wird! Soweit ich weiß, ist die Instanziierung statischer Variablen seit C++11 threadsicher. Irgendwelche Gedanken oder Ideen, warum zwei Threads dasselbe statische Inline-Mitglied instanziieren ?
Code: Select all
inline static SharedData gSharedData;
Ich habe zwei Fragen:
1)Es scheint, dass gSharedData instanziiert wurde bevor main() beginnt wie (
Code: Select all
non-inline static
2)In einem Projekt, an dem ich arbeite (eine große Codebasis mit gemeinsam genutzten Bibliotheken), das dem folgenden Code ähnelt, habe ich Im Gegensatz zur Ausgabe des folgenden Codes beobachte ich mehrere Konstruktoraufrufe von verschiedenen Threads, wobei jeder eine andere Adresse ausgibt – was darauf hindeutet, dass mehr als eine Instanz erstellt wird! Soweit ich weiß, ist die Instanziierung statischer Variablen seit C++11 threadsicher. Irgendwelche Gedanken oder Ideen, warum zwei Threads dasselbe statische Inline-Mitglied instanziieren ?
Code: Select all
#include
#include
class SharedData {
public:
SharedData() {
std::cout