c++11 lamda

c++ RAII 其实是个挺头疼问题。c++11lamda来了问题迎刃而解。

举个例子:

void f()

HANDLE f1 = openFile("a.txt");

if(!f1) return ;

HANDLE f2 = openFile("b.txt");

if(!f2){

CloseHandle(f1);

return ;

}

pass

CloseHandle(f1);

CloseHandle(f2);

}

百密一疏总有时候少了个CloseHandle。然后句柄泄漏,blablabla,procexp查看句柄,windbg hook,看代码找代码。

当然你可以try finally,可惜不是我的菜.

c++11 来了。

class cf

{

cf(std::function<void()> f):f_(f){}

~cf(){

f_();

}

std::function<void()> f_;

}

void f()

HANDLE f1 = openFile("a.txt");

        HANDLE f2 = openFile("b.txt");

cf cf_([&](){

if(f1){

CloseHandle(f1);

}

if(f2){

CloseHandle(f2);

}

});

pass

}


管他内存、句柄、自定义资源等等全ok



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值