创建一个仅包含一个对象的类

9
我觉得这是一个相当简单的问题,但我似乎找不到一个好的谷歌答案。
在使用C ++编程时(作为初学者),我通常喜欢使用类来组织我的代码。但如果只需要一个对象,是否有理由不创建类呢?当我学习面向对象编程时,我了解到类是描述某些对象的一种方式,当你需要很多个对象时。
我的问题很简单:如果只需要一个对象,是否经常创建一个类?

这取决于你在代码中的使用方式。如果在类中隐藏后台工作更容易,那就使用它。否则,不要过度思考面向对象编程并将其运用到极致。 - Inisheer
我认为他指的是只使用该类一次...不允许只有一个实例。 - Inisheer
我的意思是创建一个类,我只创建一个对象,在整个代码/项目中都会使用它。在我的情况下,即使我只创建一个对象,我并不需要“物理”上限制它只能有一个对象。但从下面的答案来看,Singleton模式似乎就是我要问的! - remi
不,单例模式是为了限制代码,使其无法创建其他对象。如果您只需要一个类的一个对象,那就创建一个即可。如果您没有要解决的问题(例如意外创建多个副本),则没有必要增加额外的复杂性。 - Bo Persson
啊,这实际上是我最需要的答案。单例模式只是一种使得不可能有多个对象的方法。如果没有理由相信会创建多个对象,那么可以创建一个类并创建一个对象,这是很常见的做法! - remi
4个回答

4
即使您只需要实例化一个类的对象一次,创建一个具有自己变量和函数的类头文件而不是在主函数中定义它们是有益的。创建类强化了封装的概念,使代码更易于维护(您可以重用类和/或更新功能)。此外,创建类将保持格式一致,并使代码易于阅读,当您重新阅读它或邀请某人查看您的程序时。

2
基本上,我想这么做的原因是,随着代码越来越大,即使只有我一个人在工作,我觉得它更易于理解。我只是感觉在某种程度上我“过度使用”类了。 但是谢谢,至少这澄清了我所做的不是一个坏主意 :) - remi
不用谢!我也是个初学者! - Hunter Laszlo Graves

3

是的,出于各种原因。

  1. 将来可能需要多个实例,使用单例模式可以减少重写的代码量。
  2. 仍然将所有需要的变量封装在类中。
  3. 查看单例模式的优点https://en.wikipedia.org/wiki/Singleton_pattern。对于线程安全性的实现更容易。
  4. 不需要实现双重检查锁定模式https://en.wikipedia.org/wiki/Double-checked_locking

C++提供了一种很好的初始化单例的方式。

Singleton& instance()
{
     static Singleton s;
     return s;
}

不需要任何条件,且它立即具备线程安全性。

2

谢谢。是的,我了解单例模式,并理解这是一种限制类只能拥有一个对象的方法。我认为它适用于非常特定的情况,但我会仔细阅读它。 - remi
4
在使用单例模式之前,请多读一些相关内容,因为它是一个非常有争议的模式。我认为只使用普通类的一个实例并没有任何问题...(封装...) - SnoozeTime

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接