C++实现Go Defer

C++实现Go Defer

defer和go一样都是Go语言提供的关键字。defer用于资源的释放,会在函数返回之前进行调用。一般采用如下模式:

f,err := os.Open(filename)
if err != nil {
    panic(err)
}
defer f.Close()

如果有多个defer表达式,调用顺序类似于栈,越后面的defer表达式越先被调用。
那么作为一位C++开发苦于在资源管理时犹豫疏忽造成的资源未释放以及内存泄漏,是不是也可以实现类似Go Defer的机制呢,答案是肯定的,毕竟无所不能的C++没有什么是做不到的,其原理就是利用C++类的构造和析构函数来实现,废话不多说,直接上代码:

class CDefer
{
public:
    CDefer(const std::function<void()>& constructor, const std::function<void()>& destructor);

    ~CDefer();

private:
    std::function<void()> _constructor;
    std::function<void()> _destructor;
};

CDefer::CDefer(const std::function<void()>& constructor, const std::function<void()>& destructor)
    : _constructor(constructor)
    , _destructor(destructor)
{
    if (_constructor)
    {
        _constructor();
    }
}
CDefer::~CDefer()
{
    if (_destructor)
    {
        _destructor();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值