C++ 单例模式
一、整体代码 01.cpp
#include <iostream> using namespace std; class Singleton { public: static Singleton* GetInstance() { if (instacne_ == NULL) { instacne_ = new Singleton; } return instacne_; } ~Singleton() { cout<<"~Singleton ..."<<endl; } //static void Free() //{ // if (instacne_ != NULL) // { // delete instacne_; // } //} class Garbo { public: ~Garbo() { if (Singleton::instacne_ != NULL) { delete instacne_; } } }; private: Singleton(const Singleton& other);//禁止拷贝构造函数 Singleton& operator=(const Singleton& other);//禁止赋值语句 Singleton() { cout<<"Singleton ..."<<endl; } static Singleton* instacne_;//静态方法只能调用静态成员 static Garbo garbo_; // 利用对象的确定性析构,类被加载就调用了构造函数,结束后调用析构函数 }; Singleton::Garbo Singleton::garbo_; Singleton* Singleton::instacne_; int main(void) { //Singleton s1; //Singleton s2; Singleton* s1 = Singleton::GetInstance(); Singleton* s2 = Singleton::GetInstance(); //Singleton s3(*s1); // 调用拷贝构造函数 return 0; }
02.cpp
#include <iostream> using namespace std; class Singleton { public: static Singleton& GetInstance() { static Singleton instance; return instance; } ~Singleton() { cout<<"~Singleton ..."<<endl; } private: Singleton(const Singleton& other); Singleton& operator=(const Singleton& other); Singleton() { cout<<"Singleton ..."<<endl; } }; int main(void) { Singleton& s1 = Singleton::GetInstance(); Singleton& s2 = Singleton::GetInstance(); return 0; }
二、解释
第一种方式是在堆空间分配了内存,所以又创建了在栈空间建立了了一个Garbo变量,利用它的确定析构性来释放刚才在堆空间占用的内存。
第二种方式直接在栈空间分配了内存,函数结束后自动释放。
补充:软件开发 , C++ ,