可以用最简单的单例模式。第一次使用的时候,把它初始化。

以上是解决初始化顺序问题的最有效方法之一。在多线程环境下,初始化静态对象不会导致竞争条件。除非是在构造器中访问了共享对象。

局部静态变量的初始会不会导致竞争条件。但是对象的解构如果需要同步进行的话,就要用简单一些的解决办法。比如:

以上代码返回的是一个指针,就需要在某个地方以恰当的线程安全的方式删除其存储。这样就容易出错,所以尽量避免使用,除非: myX 是一个多线程代码, X 对象需要释放, X 的解构器代码同步进行。

如果定义了单实例类,该类只创建了一个对象,那么 myX 函数就不是单实例。此种情况,也非本规则的例外。即也要遵循本规则。