关于c ++:我怎样才能像单例一样做一些代码工作?


How can I do some code work just like a singleton?

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
C++ Singleton design pattern.

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


您可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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的一个相同实例一样,您可以在任何地方使用它!

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

1
int g_SomeValue= OneInstance().GetValue();

不能用Sample的全局static实例来完成。这是因为:

静态初始化顺序失败


不要这样做。


我建议您不要在任何时候避免共享任何东西,因为共享会使并发性变得困难。如果您不关心并发性,那么应该将对象作为额外的参数传递给函数。环球旅行通常是个坏主意,而单身者通常只是穿着华丽服装的环球旅行。