Imagine I have this:
const string& get_name()
{
static auto* ptr_name=new string("Ron");
return *ptr_name;
}
If multiple threads are calling get_name is that UB or not?
Imagine I have this:
const string& get_name()
{
static auto* ptr_name=new string("Ron");
return *ptr_name;
}
If multiple threads are calling get_name is that UB or not?
This is thread safe in C++11 and forward.
VS-2013 has not yet implemented this part of C++11. VS-14 does:
Since C++11, initialization of function scope static variables is thread safe : the first tread calling get_name()
will initialize ptr_name
, blocking other threads until the initialization is completed. All subsequent calls will use the initialized value.
With prior C++ implementations, there is no such guarantee and all bets are off