//”TestSingleton.h”
class TestSingleton
{
TestSingleton& Instance(){static TestSingleton myTest; return myTest;}
}
这是Singleton的写法,请问有问题么?
也许有,也许没有。看你的运气了。这样的做法真是让自己命悬一线。可怕的错不是那种狰狞的错误,而是这样的细微的错误.
看到问题了么?
啊哈!这样的代码会不会出问题,完全看您的编译器了。那么我们先回顾一下局部静态变量。局部静态变量的特点是在第一次访问的时候初始化,然后就可以使用这个变量。那么这个局部变量就被用作Singleton的对象。
那么,我们再回顾一下编译器的特点。对有优化的功能的编译器,那么它可能对在类中实现的成员函数自动inline,当然这是可能。我们做Singleton的目的是让对象只存在一个(废话)。
呵呵,问题出现了,如果编译器把Instance()函数inline一下会怎么样?好可怕。这件事情花了我一个下午的时间查找。
平心而论,这样的代码我不会写;然而让我之前一眼能看出这样的问题,我只能说我不能。