在C ++中,我使用单例类并引用另一个类中的唯一实例。我想知道访问此实例的最有效方法是什么,因为它是一个大型数据结构。我考虑过这些事情。
在我使用单例类的第二个类中使用全局实例:
Singleton* singleInstance;
SingletonUser::SingletonUser ()
{
singleInstance = Singleton::getInstance(); //passes the single instance by reference, then it will be used in the class wherever needed
}
在第二个类的函数中执行相同的操作,以便在需要时获取对单例类实例的引用(需要在多个函数中多次访问它)。
我不确定哪种做法最好。有人可以解释,如果有更有效的方法,也可以解释一下吗?
谢谢!
答案 0 :(得分:3)
如果您按值传递单例实例,那么它实际上不是单例,是吗?
只要您需要访问它(#1),只需将引用(或指针)返回给实例。为每个客户端缓存一次引用只会增加复杂性,几乎肯定不会更快。
除了增加复杂性之外,我不确定#1和#3之间的区别是什么。两者都使用函数通过引用/指针访问单例实例。
答案 1 :(得分:2)
首先在C ++中尽可能避免使用指针,而是通过引用传递:
Singleton& Singleton::getInstance() {
return *singleton;
}
然后在代码中:
Singleton& st = Singleton::getInstance();
st.someFunction();
答案 2 :(得分:1)
您的选项#3是最优选的。尽量不要不必要地缓存引用 - 随着时间的推移,这些缓存的引用往往是一个维护负担。
一般情况下,请尝试避免使用单例模式。在C ++中,全局函数(非成员)同样好,并允许设计发展。