2

我想创建一个可以从我的程序中的所有类访问的环境类,但我不想在每次我想从其他类访问它的成员时初始化环境对象。在 C++ 中执行此操作的最佳方法是什么?

我想这样做是因为我有环境对象存储其他类可能使用的所有配置值。这些值是从多个地方读取的,包括不同的文件。每次在我的类中创建新的环境对象时,我都不想解析文件。

4

5 回答 5

5

单例对象并不总是解决方案。虽然有时这似乎是一个简单的解决方案,但它确实有一些缺点(例如,参见这个问题)。

你有多少类实际上需要访问这个 Environment 对象?如果你的字面意思是你所做的每一门课,那么听起来你的设计是有缺陷的。

通常,一个更好的替代单例的方法是将对象传递给真正需要它的人。

于 2009-10-12T13:34:04.393 回答
0

正如已经指出的那样,您正在寻找的是单例模式。然而,Singleton 模式通常是设计不佳的结果。每当您发现自己使用单例模式,或者就此而言,任何需要实际上是全局变量的模式时,您都应该考虑是否有更好的方法来解决这个问题。关于您的特定问题,我建议您查看QSettings类,它是Qt Framework的一部分,这是一个免费且高质量的开源库。

QSetttings 类将允许您使用首选的本机机制(Windows 上的注册表、Mac OS X 上的属性列表文件和 Linux 上的 gconf XML 文件)加载/保存配置设置。此外,您可能希望查看我的帖子Environment Variables are Evil,以防您正在考虑使用环境变量进行配置(配置的名称“环境”听起来非常不祥)。

于 2009-10-12T13:41:01.960 回答
0

您需要做的是将您的环境类包装在单例模式中。有关更多信息,请参阅此 SO 问题:C++ Singleton 设计模式

于 2009-10-12T13:25:47.590 回答
-1

听起来你想要一个单例模式。这将允许您创建和使用一个类的一个对象/实例,但仅此而已,即使您多次访问它。看:

http://www.infernodevelopment.com/singleton-c

于 2009-10-12T13:26:17.917 回答
-1

您可以创建一个静态单例服务。此服务包含您的所有对象集合并提供访问这些对象的功能。

于 2009-10-12T13:28:01.610 回答