我怎样才能像单身一样做一些代码工作?

时间:2011-01-25 19:20:06

标签: c++

  

可能重复:
  C++ Singleton design pattern.

如何只创建一个类的实例,并在不使用单例的情况下与所有标题和源文件共享该实例?你能提供一个简单的例子吗?

3 个答案:

答案 0 :(得分:3)

你可以这样做:

class Sample
{
   /*** your code **/
   public:
    Sample();
    void DoWork();
    int  GetValue();
  /*** other functions ***/
};

Sample & OneInstance()
{
    static Sample instance;
    return instance;
}

//Use OneInstance everywhere like this
OneInstance().DoWork();

注意Sample不是单身人士,但您可以使用OneInstance()功能,就好像它是Sample的同一个实例,您可以在任何地方使用它!

您可以使用它来初始化一些全局变量,如下所示:

int g_SomeValue= OneInstance().GetValue();

使用static的全局Sample实例无法完成此操作。那是因为:

static initialization order fiasco

答案 1 :(得分:2)

答案 2 :(得分:1)

我建议不要在任何时候分享任何东西,因为共享会使并发变得困难。如果您不关心并发性,那么您应该将对象作为额外参数传递给函数。全球通常是一个坏主意,而单身人士通常只是带有华丽装扮的全球形。