因此,出现了类似的 ScopeExit。boost 里有一个 BOOST_SCOPE_EXIT,Loki 里面也有一个 ScopeGuard。 继续使用刚才的案例,BOOST_SCOPE_EXIT 用法: boolGenFile() { HANDLEhFile =CreateFile(_T("Test.txt"),GENERIC_WRITE, 0,NULL,CREATE_ALWAYS, 0,NULL); if(hFile ==INVALID_HANDLE_VALUE) { returnfalse...
voidtest(){char*test=newchar[100];ScopeExit{delete[]test;// 在test函数声明周期结束后自动执行delete[]操作};if(a){return;}xxx;if(b){return;}xxx;} 当然,正常C++代码不鼓励使用裸指针,可以使用智能指针来申请资源,这里只是举个例子,使用ScopeExit也可以用于处理文件资源的关闭等等。 两者代码比较后优劣...
Boost.ScopeExit 版 现在是 2020 年 9 月,建议使用 cpp17,所以抛弃 BOOST_SCOPE_EXIT + BOOST_SCOPE_EXIT_END,使用 cpp11 的 BOOST_SCOPE_EXIT_ALL。 #include <winsock2.h> #include <boost/scope_exit.hpp> #pragma comment(lib, "ws2_32.lib") int main(int argc, char* argv[]) { WSADATA wsa...
因此,出现了类似的 ScopeExit。boost 里有一个 BOOST_SCOPE_EXIT,Loki 里面也有一个 ScopeGuard。 继续使用刚才的案例,BOOST_SCOPE_EXIT 用法: boolGenFile() { HANDLEhFile =CreateFile(_T("Test.txt"),GENERIC_WRITE, 0,NULL,CREATE_ALWAYS, 0,NULL); if(hFile ==INVALID_HANDLE_VALUE) { returnfalse...
如下定义一个 ScopeExitAction 类: 它在构造的时候,传入一个std::function函数对象。在析构时,执行这个函数对象。 然后就可以这么使用了: voidfoo(){ScopeExitActionaa([](){cout<<"foo exit 1";});ScopeExitActionbb([](){cout<<"foo exit 2";});} ...
BV12f4y187Pz 未经作者授权禁止转载 C++ 中实现资源管理的scope_exit样例示范 2 -- 3 缓存 分享 相关推荐 评论-- 2307 37 14:03 App 【从犯难到自信】一个压箱底的C/C++宏调试技巧 - 99%的程序员都没用过的 79 -- 46:11 App 第四周、C++高级使用技巧4 16.3万 3261 50:35:17 App [C++...
在下文中一共展示了Scope::exit方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。 示例1: while ▲点赞 7▼ CFA::CFA(constScope& scope) : scope_(scope) ...
std::experimental::scope_exit 定义于头文件<experimental/scope> template<classEF> classscope_exit; (库基础 TS v3) 类模板scope_exit是通用的作用域防护,有意使它在退出作用域时调用其退出函数。 scope_exit非可复制构造(CopyConstructible)、可复制赋值(CopyAssignable)或可移动赋值(MoveAssignable),然而若EF满...
ScopeExit { delete[] test; // 在test函数生命周期结束后自动执行delete[]操作 ofs.close(); // 在生命周期结束后自动关闭文件,这里只是举个不恰当例子,ofstream自动生命周期结束后就会关闭 }; if (a) { return; } xxx; if (b) { return;
ON_SCOPE_EXIT( [&a](){ delete a; } //lambda可调用对象 ); //do something } /*<---函数退出,a通过ON_SCOPE_EXIT释放内存*/ 而ON_SCOPE_EXIT实际上类似于一个资源管理类,其实现如下: #define SCOPEGUARD_LINENAME_CAT(name, line) name##line #define SCOPE...