Angenommen, bar() kann nie nullptr zurückgeben.
Nun wird foo() zum ersten Mal von vielen Threads gleichezeitig aufgerufen.
Kann es sein, dass die Assertion fliegt? Weil z. B. einer der Threads innerhalb von bar() ist und ein anderer dann irgendwie mit p == nullptr rechnet?
Ja, C++11-konforme thread-sichere Initialisierung statischer lokaler Variablen setzt VC++ erst ab dem November 2013 Community Tech Preview um, das offiziell noch nicht für den Produktiveinsatz gedacht ist. Also nicht vor 2014/2015, bis dahin fliegt die Assertion ganz sicher irgendwann mal.
In dem Fall wird per Makro die statische Variable angelegt und soll einmal initialisiert werden, allerdings erst wenn schon Teile vom Programm gestartet sind. Dafür haben sich halt die lokalen statischen Variablen prima angeboten.
CodingCat hat geschrieben:das offiziell noch nicht für den Produktiveinsatz gedacht ist. Also nicht vor 2014/2015, bis dahin fliegt die Assertion ganz sicher irgendwann mal.
Ich bin mir nicht sicher wie sehr ich mit instabilem MSVC arbeiten möchte.
Also wenn du in irgendeiner Firma an Produktivcode arbeitest oder so, ist es natürlich nicht zu empfehlen, aber ich persönlich verwend immer die allerletzte Version von MSVC und hatte damit eigentlich noch nie Probleme...
CodingCat hat geschrieben:das offiziell noch nicht für den Produktiveinsatz gedacht ist. Also nicht vor 2014/2015, bis dahin fliegt die Assertion ganz sicher irgendwann mal.
Ich bin mir nicht sicher wie sehr ich mit instabilem MSVC arbeiten möchte.
EDIT: Aber ich denke wir testen das einfach mal.
Ich wollte nicht andeuten, dass dieses Feature im CTP nicht funktioniert, vielmehr, dass es bei Source-Code-Kunden ohne installiertes CTP noch ein bis zwei Jahre nicht gesichert vorausgesetzt werden kann.