当前位置:编程学习 > C/C++ >>

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++ ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,