首页 > 其他分享 >RAII技法的工具类scope_guard

RAII技法的工具类scope_guard

时间:2023-07-02 21:56:20浏览次数:38  
标签:function LINENAME RAII dismissed guard onExitScope ScopeGuard SCOPEGUARD scope

#pragma once

/*************************************************************************************
描 述:RAII技法的工具类
使 用 说 明:
//资 源 释 放
void foo()
{
HANDLE h = OpenFile(...);
ON_SCOPE_EXIT([&]{ CloseHandle(h); });
... // use the file
} //when the function is executed, it will automatically CloseHandle(h);

//函 数 回 滚:
void foo()
{
ScopeGuard onFailureRollback( rollbackFunction );
... // do something that could fail
onFailureRollback.Dismiss(); //stop the rollback
}
*************************************************************************************/
#include <functional> //std::function

class ScopeGuard {
public:
explicit ScopeGuard(std::function<void()> onExitScope) : onExitScope_(onExitScope), dismissed_(false)
{
}
~ScopeGuard()
{
if (!dismissed_)
{
onExitScope_();
}
}
void Dismiss()
{
dismissed_ = true;
}

public: // noncopyable
ScopeGuard(ScopeGuard const&) = delete;
ScopeGuard& operator=(ScopeGuard const&) = delete;

private:
std::function<void()> onExitScope_;
bool dismissed_;
};

#define SCOPEGUARD_LINENAME_CAT(name, line) name##line
#define SCOPEGUARD_LINENAME(name, line) SCOPEGUARD_LINENAME_CAT(name, line)
#define ON_SCOPE_EXIT(callback) ScopeGuard SCOPEGUARD_LINENAME(EXIT, __LINE__)(callback)

标签:function,LINENAME,RAII,dismissed,guard,onExitScope,ScopeGuard,SCOPEGUARD,scope
From: https://www.cnblogs.com/suanniniu/p/17521494.html

相关文章

  • C++ 惯用法之 RAII
    RAII(ResourceAcquisitionIsInitialization)资源获取即初始化,是C++中最基本、应用最广范的惯用法(idiom)之一。RAII的基本思想是通过构造/析构函数,对资源的获取/释放进行封装,然后借助局部对象的自动生命周期来管理资源。使用RAII可以让用户无需手动管理资源的获取/释放,减少出......
  • Pico Scope使用详解
    本篇文章主角为Picoscope Picoscope是CANoe和CANalyzer的集成示波器解决方案,是基于USB连接的一种示波器硬件。当我们需要确认干扰和干扰序列,同时分析总线的物理信号和逻辑信号时,可以采用Scope配合CANoe观测电平信号。同时也是一致性测试不可或缺的硬件工具。除此之外也可以有......
  • Oracle DataGuard 监控日志同步是否正常
    1.查看备库(或者主库)的状态SETfeedoffSETlines300SETpages999COLUMNdatabase_nameheading"Database|Name"FORMATa12COLUMNdatabase_roleheading"Database|Role"FORMATa30COLUMNprotection_modeheading"Prote......
  • 最简单的11g Active DataGuard(ADG)搭建配置过程(项目步
    最简单的11gActiveDataGuard(ADG)搭建配置过程(项目步骤) 一、环境介绍:  我在db01和db02两台Linux虚拟机上首先分别安装了一套数据库软件,在db01主机上创建了名为woo的数据库;我们这次的实验是要搭建了一套Oracle11gActiveDataGuard;目的是为了实现数据库同步的功能,并且了解O......
  • LoadRunner通过SiteScope监控MySQL的性能
    步骤:安装SiteScope下载Java版的MySQL驱动,下载地址:http://www.mysql.com/downloads/connector/j/下载成功后,把解压缩的mysql-connector-java-5.1.14-bin.jar文件放入:C:\SiteScope\java\lib\ext 以及 C:\SiteScope\java64\lib\ext目录下。重启系统.进入SiteSc......
  • 「JOISC 2023 Day4」 Security Guard
    subtask1因为\(1\les_i\le2\),所以每艘船上都至少有一个保安。令\(cnt_i\)表示第\(i\)艘船上的保安数,可以先将所有\(cnt_i+=1\),所有\(s_i-=1\)。经过这一次操作后,如果两艘船之间的小岛的\(s_i\)全为\(0\),表示这两艘船可以相互到达,即可将这两艘船合并成一艘,然后再做一......
  • std::thread 二:互斥量(lock_guard())
    *:使用lock_guard后,就不可以使用lock()和unlock()*:lock_guard和智能指针一样,会自动解锁 #include<iostream>#include<thread>#include<mutex>#include<list>usingnamespacestd;classA{public:voidinNum(){for(inti=0;......
  • C++面试八股文:什么是RAII?
    C++面试八股文:什么是RAII?某日二师兄参加XXX科技公司的C++工程师开发岗位第13面:面试官:什么是RAII?二师兄:RAII是ResourceAcquisitionIsInitialization的缩写。翻译成中文是资源获取即初始化。面试官:RAII有什么特点和优势?二师兄:主要的特点是,在对象初始化时获取资源,在对......
  • Vue进阶(幺贰陆):表格复用 TypeError: _self.$scopedSlots.default is not a function解
    (文章目录)一、前言在使用elementUI的el-table组件时,表头应用v-if判断来动态显示,正常来说这样的操作是没有问题的,但是如果在这基础上使用<templateslot-scope="scope">操作的话,表头一旦切换就会报错,错误信息如下:_self.$scopedSlots.defaultisnotafunction二、解决方......
  • VUE使用Element-ui表达式拼接字符串 el-table-column的prop拼接字符串 拼接table 使
    VUE使用Element-ui表达式拼接字符串el-table-column的prop拼接字符串使用<templateslot-scope="scope">更改td里面值https://blog.csdn.net/WindNolose/article/details/125422409描述VUE中的标签属性,可以在属性前使用:,让属性绑定到data中的动态数据el-table-column标......