使用单例模式进行延迟初始化

cac*_*cau 14 c++ singleton design-patterns

以下代码是否有助于延迟初始化
或者singletonInstance只要有人包含标题(甚至在程序启动时),就会创建?

class SingletonClass
{
    private:
         SingletonClass();
        ~SingletonClass();

    public: 

        static const SingletonClass& Instance()
        {
            static SingletonClass singletonInstance;
            return singletonInstance; 
        }
};
Run Code Online (Sandbox Code Playgroud)

ste*_*anv 15

这被称为迈耶斯单身人士,他们是懒惰的实例.

有一些注意事项:

  • 单例将在程序结束时按照创建它们的相反顺序销毁,因此可能存在依赖性问题.
  • C++ 03不保证在多线程环境中不受竞争条件的影响.


πάν*_*ῥεῖ 10

SingletonClass构造不会早于somenone呼叫被叫Instance()方法.

因此,它有利于延迟初始化.

  • @cacau:代码中没有静态数据成员. (4认同)
  • @πάνταῥεῖ:*local static*(作为函数中声明的静态变量已知)的行为确实已经明确指定.它们将被实例化*第一次*控制流通过它们的声明(因此如果嵌套在`if`块中,第一次采用`if`分支)并且如果在初始化期间抛出异常它将在下一次控制流程通过其声明时重新尝试.此外,在C++ 11中,这个初始化是线程安全的; 虽然许多编译器(gcc,clang,...)已经在C++ 03中保证了这一点. (4认同)