zoukankan      html  css  js  c++  java
  • 利用C++特性 析构对象(ScopeGuard.h)

    #include <functional>
    #pragma once
    class CScopeGuard    //用于延迟执行构造函数传入的函数
    {
    //public:
    //    CScopeGuard();
    //    ~CScopeGuard();
    public:
        explicit CScopeGuard(std::function<void()> onExitScope)
            : onExitScope_(onExitScope), dismissed_(false)
        { }
    
        ~CScopeGuard()
        {
            if (!dismissed_)
            {
                onExitScope_();
            }
        }
    
        void Dismiss()
        {
            dismissed_ = true;
        }
    
    private:
        std::function<void()> onExitScope_;
        bool dismissed_;
    
    private:
        // noncopyable
        CScopeGuard(CScopeGuard const&);
        CScopeGuard& operator=(CScopeGuard const&);
    
    };
    
    #define SCOPEGUARD_LINENAME_CAT(name, line) name##line
    #define SCOPEGUARD_LINENAME(name, line) SCOPEGUARD_LINENAME_CAT(name, line)
    #define ON_SCOPE_EXIT(callback) CScopeGuard SCOPEGUARD_LINENAME(EXIT, __LINE__)(callback)

    利用类的析构函数在作用域结束后自动调用,对一些变量进行释放。

  • 相关阅读:
    全表扫描
    服务器信息表
    事务的丢失更新
    oracle core 概述
    oracle命中率模型计算
    性能量化之cpu
    一个sql导致temp表空间爆掉
    oracle稳定执行计划1
    oracle热点表online rename
    oracle构建一致性读
  • 原文地址:https://www.cnblogs.com/linxisuo/p/15639001.html
Copyright © 2011-2022 走看看