Static Initialization Order Fiasco

Static Initialization Order Fiasco (SIOF),我也是最近才知道了这个说法,因为在开发程序的时候被它bug了:对于一个static变量,不管它是全局的或者是类的成员变量,访问它的时候不一定总是成功的,甚至会造成程序crash,因为不能保证它在被访问时已经被初始化了(跟初始化的顺序有关,所以称为初始化顺序的Fiasco)。以下将制造一个非常简单的SIOF情形: Whatever.h #include <vector> #include <string> class Whatever { public: Whatever() { cout << "Construct Whatever" << endl; Display(); } ~Whatever() { cout << "Destruct Whatever" << endl; Display(); } void Display() { cout << "static int:" << i << endl; cout << "static string:" << m_str << endl; cout << [...]