在C++ 11中,以下是线程安全的:
void someFunc()
{
static MyObject object;
}
Run Code Online (Sandbox Code Playgroud)
但是关于
void someFunc()
{
static MyObject *ptr = new MyObject();
}
Run Code Online (Sandbox Code Playgroud)
这是否是线程安全的?
正如@Nawaz在评论中提到的那样,可能MyObject构造函数不是线程安全的,所以让我们将问题分成几部分:
1)如果ctor是线程安全的(它不访问任何共享状态),这是否是static MyObject *ptr = new MyObject();线程安全的?换句话说,是static int *ptr = new int(0);线程安全的吗?
2)如果ctor不是线程安全的,但是只能通过someFunc从不同的线程调用来创建对象,并且构造函数从未在其他任何地方使用过,那么这是否是线程安全的呢?