使用Singleton类的最有效方法
Most Efficient Way to Use Singleton Classes
在C++中,我使用一个singleton类,并引用另一个类中的唯一实例。我想知道访问这个实例最有效的方法是什么,因为它是一个大型数据结构。我考虑过这些事情。
- 从singleton类获取引用,而不是按值传递数据结构
-
在我的第二个类中使用全局实例,该类使用singleton类:
Singleton* singleInstance; SingletonUser::SingletonUser () { singleInstance = Singleton::getInstance(); //passes the single instance by reference, then it will be used in the class wherever needed }
-
在第二个类的函数中做同样的事情,这样我就可以在需要的时候获得对singleton类实例的引用(需要在几个函数中多次访问它)。
我不确定哪种练习是最好的。有人能解释吗?如果有更有效的方法,也可以解释吗?
谢谢!
如果您通过值传递您的singleton实例,那么它实际上不是singleton,是吗?
只要在需要访问实例时返回一个引用(或指针)(#1)。为每个客户端缓存一次引用只会增加复杂性,而且几乎肯定不会更快。
除了增加复杂性之外,我不确定#1和#3之间有什么区别。两者都使用一个函数通过引用/指针访问singleton实例。
首先在C++中尽可能避免指针,而是通过引用传递:
Singleton& Singleton::getInstance() {
return *singleton;
}
然后在代码中:
Singleton& st = Singleton::getInstance();
st.someFunction();
您的选项#3是最可取的。尽量不要缓存不必要的引用——随着时间的推移,这些缓存的引用往往会成为维护负担
一般来说,尽量避免使用singleton模式。在C++中,全局函数(非成员)同样好,并允许设计不断发展。
相关文章:
- 在C++中初始化向量映射的最有效方法
- 将此布尔值传递给此函数的最有效方法是什么?
- 比较C++变量的最有效方法
- 在 c++ 中解决段树以外的范围查询的有效方法是什么?
- 存储变量的更有效方法是什么?
- 确保套装新鲜度的有效方法
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 映射唯一值和重复值的有效方法.可以访问键或值的位置
- 在C++事务之间存储大量字符数据的有效方法
- 在unordered_multimap中精确迭代一次每个键的有效方法
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 检查两个向量是否并行的最有效方法
- 从浮点数中删除小数部分但保留类型的有效方法
- 传递非泛型函数的最有效方法是什么?
- 按升序打印矢量的所有元素直到它为空而没有重复项的最有效方法是什么?
- 创建字符串数组的有效方法
- 返回一个引用C++中另一个类对象的对象的有效方法
- C++去除前x个元素的有效方法,在不改变向量大小的情况下将第x+1个元素推到第一个
- 将一种数据类型的向量复制到同一数据类型的结构向量中的有效方法是什么
- 从std::map值中获取密钥的有效方法