我有一个程序有一个全局类实例,我想将其转换为单例。有人能给我一个关于如何做到最好的快速例子吗?
由于
答案 0 :(得分:1)
关于以下内容的单身人士:
class Singleton
{
public:
static Singleton & instance()
{
static Singleton s;
return s;
}
private:
Singleton();
Singleton(const Singleton &);
};
当你第一次尝试访问它时,分配/初始化单身人士。这使得它更可预测,即在源文件之间以不可预测的顺序初始化的全局对象。
您需要在每次访问时调用static Singleton s;
,而不是全局Singleton::instance()
。
编辑: 在单例的情况下,只有一个类的实例,你可以通过静态函数访问,我通常将其称为实例或获取,但你可以随意调用它。剩下的就像任何普通班级一样。
我忘了提到在c ++中你必须将复制构造函数设为私有。单身人士不能拥有任何公共建设者。
instance()
函数返回隐藏的“全局变量”,因此您可以使用它。假设你的单身人士中有一个名为str的字符串。您可以使用Singleton::instance().str = "something";