使用Singleton类的最有效方法

Most Efficient Way to Use Singleton Classes

本文关键字:有效 方法 Singleton 使用      更新时间:2023-10-16

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

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

    Singleton* singleInstance;
    SingletonUser::SingletonUser ()
    {
        singleInstance = Singleton::getInstance(); //passes the single instance by   reference, then it will be used in the class wherever needed
    }
    
  3. 在第二个类的函数中做同样的事情,这样我就可以在需要的时候获得对singleton类实例的引用(需要在几个函数中多次访问它)。

我不确定哪种练习是最好的。有人能解释吗?如果有更有效的方法,也可以解释吗?

谢谢!

如果您通过值传递您的singleton实例,那么它实际上不是singleton,是吗?

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

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

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

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

然后在代码中:

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

您的选项#3是最可取的。尽量不要缓存不必要的引用——随着时间的推移,这些缓存的引用往往会成为维护负担

一般来说,尽量避免使用singleton模式。在C++中,全局函数(非成员)同样好,并允许设计不断发展。