Juk*_*bom 0 c++ design-patterns
无论马歇尔Clines''C++ FAQ精简版’和斯科特迈尔斯有效的C++建议使用返回局部静态对象的功能,以避免与非局部静态对象的初始化顺序可能出现的问题.
简而言之(来自"Effective C++",Scott Meyers的第3版):
FileSystem& tfs()
{
static FileSystem fs;
return fs;
}
Run Code Online (Sandbox Code Playgroud)
两位编写者都补充说,这与Singleton模式类似,不同之处在于它不能确保本地fs是FileSystem的唯一实例.
现在,在资源管理类T的一个实例足够的情况下,您更喜欢Singleton类或本地静态方法的原因是什么?尽管我们的应用程序不需要多个实例,但并不一定要将T类限制为仅使用一个实例.
显然,在执行TDD时有一个全局对象是一个问题,但在这种情况下,这两种方法都是全局的.
小智 5
您可以同时使用:
class Singleton {
public:
static Singleton & Instance() {
static Singleton s;
return s;
}
private:
Singleton() {}
};
Run Code Online (Sandbox Code Playgroud)
现在,可以通过Instance函数创建Singleton的唯一方法(因为构造函数是私有的),因此您可以保证只存在一个Singleton.如果要使用问题中描述的自由函数方法,可以考虑使该函数成为Singleton类的朋友,同时保留私有构造函数.
请注意,此构造(与涉及静态变量的所有构造一样)不是线程安全的.如果线程安全性存在问题,则在访问静态Singleton变量时需要考虑使用双重检查锁定模式.