在函数和线程安全中使用静态变量时隐藏分支

时间:2019-05-14 05:30:29

标签: c++ compilation static

我遇到了我不了解的行为。

这是常见的单例实现的test code

链接中的代码:

#include <iostream>

using namespace std;

class CFoo
{
public:
  static CFoo & instance ()
  {
    static CFoo instance;
      return instance;
  }
private:
    CFoo ()
  {
    cout << "CFoo();" << endl;
  }
};

int
main ()
{
  cout << "main() enter" << endl;
  CFoo & foo1 = CFoo::instance ();
  cout << "got foo1 @ " << &foo1 << endl;

  CFoo & foo2 = CFoo::instance ();
  cout << "got foo2 @ " << &foo2 << endl;

  cout << "main() leave" << endl;
  return 0;
}

请注意,函数(CFoo)中的静态(instance())仅在首次调用函数时(Main() enter之后)才初始化。

这种行为使我感到困惑,因为我认为静电会在启动(主电源前)阶段启动。 另外,对于c ++来说这似乎是非常规的,因为我唯一想到的是通过添加“隐藏”条件来检查“首次进入”。

我有两个问题:

  1. 该行为如何实现?
  2. 如果存在隐藏的分支:代码线程安全吗?
    还是有多个线程同时访问该方法,会不会有两个不同的实例?

0 个答案:

没有答案