众所周知,网上一直流传着,不知道叫什么的单例,乱七八糟写啥的都有。不是报错就是内存泄露的,没一点实用的。全是半瓶水晃荡,瞎几把写。 那么今天就写一个。
单例就是始终保持一个实例。 在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类应用的成果。