利用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)

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

原文地址:https://www.cnblogs.com/linxisuo/p/15639001.html