リソースの自動回収の単一モード

5946 ワード

本文は1种のとても简単な资源を自动的に回収することができる単例のモードを绍介して、ふだんもよく别の书く技术の文章を见て、CSDNの中に多くの牛人がいて、彼らの书く文章は分かりやすくて、言叶は简単で、文章を见る人に美しい楽しみをもたらすことができます.しかし、技術的な文章を書く子供靴の文章が冗長で、おならの話がたくさんあって、時間を無駄にしています.はい、私はくだらないことを言わないで、本文が必要な人に役立つことを望んでいます.
  • 試験環境:Linux CentOS 7.2

  • 直接コードをつけると、仲間たちは自分の環境にコピーしてコンパイルして実行することができます.C++これは、やはり自分で噛んでこそ味がします.
    コードブロック[SingletonLogManager.h]
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    /* 
     * File:   SingletonLogManager.h
     * Author: Jerry
     *
     * Created on 2017 8 8 ,   2:25
     */
    
    #ifndef SINGLETONLOGMANAGER_H
    #define SINGLETONLOGMANAGER_H
    
    #include 
    using namespace std;
    
    class SingletonLogManager 
    {
    public:
        static SingletonLogManager* GetInstance();    //       
    
    public:
        void print();
    
    protected:
        SingletonLogManager();
        ~SingletonLogManager();
    
    
        //     
        class SingletonRecovery   
        {  
        public:  
            SingletonRecovery()  
            {  
    
            }  
            ~SingletonRecovery()  
            {  
            cout << " begin to run destruction !" << endl;
                if (m_pInstance != NULL)  
                {  
                    delete m_pInstance;  
                    m_pInstance = NULL;                  
                }  
            }  
        };  
    
        //      
        static SingletonRecovery m_SR;  
    
    private:
        static SingletonLogManager*                            m_pInstance;                  //     
    
    };
    
    #endif /* LOGTOOL_H */
    
    

    コードブロック[SingletonLogManager.cpp]
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    /* 
     * File:   LogTool.cpp
     * Author: Jerry
     * 
     * Created on 2017 8 8 ,   2:25
     */
    #include 
    #include 
    #include "SingletonLogManager.h"
    
    // new    
    SingletonLogManager* SingletonLogManager::m_pInstance = new SingletonLogManager;
    SingletonLogManager::SingletonRecovery SingletonLogManager::m_SR;
    
    
    SingletonLogManager::SingletonLogManager() 
    {
    
    }
    
    SingletonLogManager::~SingletonLogManager()
    {
    
    }
    
    //     
    SingletonLogManager* SingletonLogManager::GetInstance()
    {
        return m_pInstance;
    }
    
    void SingletonLogManager::print()
    {
      printf("SingletonLogManager::print()

    "
    ); }

    コードブロック[main.cpp]
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    
    /* 
     * File:   LogTool.cpp
     * Author: Jerry
     * 
     * Created on 2017 8 8 ,   2:25
     */
    
    #include 
    #include "SingletonLogManager.h"
    
    void testRecovery()
    {
      SingletonLogManager* pSingletonLogManager = SingletonLogManager::GetInstance();
      pSingletonLogManager->print();
    }
    
    int main()
    {  
      cout << "testRecovery begin !" << endl;
      testRecovery();
      cout << "testRecovery end !" << endl;
      return 0;
    }