众所周知,网上一直流传着,不知道叫什么的单例,乱七八糟写啥的都有。不是报错就是内存泄露的,没一点实用的。全是半瓶水晃荡,瞎几把写。 那么今天就写一个。
单例就是始终保持一个实例。 在C++ 中实现,我们就只要注意两点。哪里两点? 拷贝构造,拷贝复制。这两点。 C++ 默认类中,会包含六个构造函数。我们只要把上面这两个禁用掉就没问题了。 怎么禁用?用新特性(=delete)。 有人说,“啊,我们用的什么类模板,有new” 别跟我扯什么,这哪的。今天就用这个写了。
class Singleton
{
public:
static Singleton& GetInstance()
{
static Singleton instance;
return instance;
}
Singleton(const Singleton&) = delete; //这个叫拷贝构造
Singleton& operator =(const Singleton&) = delete;//拷贝赋值
~Singleton() {};
private:
Singleton() {}; //默认构造函数
};
class A //有些人可能会这么写,这是不是也可以。
{
public:
static A& GetInstance();
private:
A() {};
A(const A& rts);
};
A& A::GetInstance()
{
static A a;
return a;
}
int main()
{
Singleton& sing = Singleton::GetInstance(); //得到一个实例
A &a = A::GetInstance();
}
这是不是完全体现了C++ Class类应用的成果。