[英]c++ using static member as singleton instance leads to different object
[英]Singleton with static member instance
我有一个Singleton实现,我不确定它包含哪些缺点。 有谁能告诉我这个实现有多好?
template <class Child>
class Singleton {
public:
inline static Child& Instance() {
return Instance_;
}
Singleton(const Singleton&) = delete;
Singleton(Singleton&&) = delete;
Singleton& operator=(const Singleton&) = delete;
Singleton& operator=(Singleton&&) = delete;
protected:
Singleton() = default;
private:
static Child Instance_;
};
template <typename Child> Child Singleton<Child>::Instance_;
我知道Scott Meyers的Singleton实现,它定义了GetInstance()
函数中的静态Instance_
。
inline static Child& Instance() {
static Child Instance_;
return Instance_;
}
但是不存在额外的开销,因为每次调用函数时都必须检查Instance_
是否已经初始化。
您的解决方案很容易出现静态初始化命令惨败 。
静态类成员与所有全局静态变量一起初始化; 在main()
之前,以未指定的顺序。 如果一个静态变量的初始化恰好引用另一个静态变量,则会得到未定义的行为。
但是,在函数中使用静态变量会给您特殊的保证:只有在第一次执行函数时才会创建对象。 这意味着您不必担心初始化顺序(显然,除非您创建一个循环)。
关于性能,检查是由编译器实现的,所以它可能调得非常好。 一如往常,如果你有疑问 - 基准。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.