C ++动态初始化 - 跨翻译单元

时间:2014-03-14 16:47:47

标签: c++

1 个答案:

答案 0 :(得分:2)

  

在动态初始化完成之前,是否可以(或不能)在另一个翻译单元中调用此类中的静态方法?

粗体通道很清楚,不是吗? 这些数据的初始化保证在首次使用 任何函数或其翻译单元中定义的类之前发生。函数在哪里被称为来自并不重要。保证是在首次使用 in 翻译单元之前进行初始化。当然,他们可能被称为来自另一个翻译单元,但这没有任何区别。在输入转换单元中定义的函数之前,必须先执行初始化。

换句话说,你很安全。

...

假设是单线程执行,即。 C ++ 98在多线程环境中不提供任何保证,因此对于线程应用程序,上述保证通常只意味着第一个线程将执行初始化以使用此转换单元中的函数或类。然后你有一个竞争条件正在执行这个初始化,其他线程可能会点击部分初始化的数据。