使用Singleton类的最有效方法

时间:2012-01-28 04:24:44

标签: c++ design-patterns singleton pass-by-reference

在C ++中,我使用单例类并引用另一个类中的唯一实例。我想知道访问此实例的最有效方法是什么,因为它是一个大型数据结构。我考虑过这些事情。

  1. 从单例类获取引用,而不是按值传递数据结构
  2. 在我使用单例类的第二个类中使用全局实例:

    Singleton* singleInstance;
    
    SingletonUser::SingletonUser ()
    {
        singleInstance = Singleton::getInstance(); //passes the single instance by   reference, then it will be used in the class wherever needed
    }
    
  3. 在第二个类的函数中执行相同的操作,以便在需要时获取对单例类实例的引用(需要在多个函数中多次访问它)。

  4. 我不确定哪种做法最好。有人可以解释,如果有更有效的方法,也可以解释一下吗?

    谢谢!

3 个答案:

答案 0 :(得分:3)

如果您按值传递单例实例,那么它实际上不是单例,是吗?

只要您需要访问它(#1),只需将引用(或指针)返回给实例。为每个客户端缓存一次引用只会增加复杂性,几乎肯定不会更快。

除了增加复杂性之外,我不确定#1和#3之间的区别是什么。两者都使用函数通过引用/指针访问单例实例。

答案 1 :(得分:2)

首先在C ++中尽可能避免使用指针,而是通过引用传递:

Singleton& Singleton::getInstance() {
    return *singleton;
}

然后在代码中:

Singleton& st = Singleton::getInstance();
st.someFunction();

答案 2 :(得分:1)

您的选项#3是最优选的。尽量不要不必要地缓存引用 - 随着时间的推移,这些缓存的引用往往是一个维护负担。

一般情况下,请尝试避免使用单例模式。在C ++中,全局函数(非成员)同样好,并允许设计发展。