C++ 全局对象与Singleton模式

C++ 全局对象与Singleton模式,c++,design-patterns,C++,Design Patterns,全局对象(在C++中)是否总能取代单例模式?如果是,单例模式的优点是什么?两者都提供不同的功能 全局对象在全局范围内创建一个对象,可以跨多个翻译单元访问该对象,而单例模式限制用户能够为该特定类创建单个对象 底线: 你在比较苹果和桔子。您根据要实现的功能选择了一个 一个全局对象在您的程序中都是可用的(这使得初学者似乎更容易管理,直到您开始做任何非琐碎的事情,这将成为调试的噩梦,因为它可能是导致错误的任何代码)。这是强烈反对的 单件是一个对象,它有一个限制,即您只能制作其中一个。它们感觉是全局的,因

全局对象(在C++中)是否总能取代单例模式?如果是,单例模式的优点是什么?

两者都提供不同的功能

全局对象在全局范围内创建一个对象,可以跨多个翻译单元访问该对象,而单例模式限制用户能够为该特定类创建单个对象

底线:

你在比较苹果和桔子。您根据要实现的功能选择了一个

一个全局对象在您的程序中都是可用的(这使得初学者似乎更容易管理,直到您开始做任何非琐碎的事情,这将成为调试的噩梦,因为它可能是导致错误的任何代码)。这是强烈反对的

单件是一个对象,它有一个限制,即您只能制作其中一个。它们感觉是全局的,因为它们通常是通过静态函数以全局方式访问的,因此在调试时仍然可能是您的任何代码损坏了对象,因此管理起来也很痛苦。根据语言和集团/社区/书籍的不同,人们强烈反对它


从某种意义上说,你的问题似乎在寻求“正确”的方式。最好的方法是完全避免使用它们,并在类中很好地填充数据,并将它们作为参数清楚地传递给函数。

我看到的一个优点是,一个人无法控制全局对象的创建,并且在对象需要稀缺资源时,有时可能代价高昂,但通过单例方法中的延迟创建,您可以将对象的创建推迟到首次访问为止。

警告:全面概括!两种方法都不使用可能更好。它们真的有那么不同吗?几乎所有的时间里,单身汉似乎都被当作一个全球人的道德等价物,因为“全球人都是邪恶的,duh”。除非通过
static
/
名称空间{}
(我从未见过这样做)明确限制当前TU,否则单例对象也可以跨多个TU访问。全局对象也只存在一次。虽然您可以创建其类型的其他实例,但实际上很少这样做。@delnan:绝对,singleton模式适用于类。它是关于限制创建一个类的多个实例的能力。可以创建任何类型的全局对象,而无需修改该类型(如果是类类型);该类型不需要知道它是否被用作全局类型。对于大多数全局变量,在程序中使用该类型的其他实例并没有什么害处。