c++11 lamda

来源:互联网 发布:网络回拨电话原理 编辑:程序博客网 时间:2024/06/08 15:56

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



0 0
原创粉丝点击