繁体   English   中英

单例与静态成员实例

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM