简介
使用RAII用于闭包Closure自动执行run
结构
ClosureGuard()
:构造函数,初始闭包_done
为null
ClosureGuard() : _done(NULL) {}
ClosureGuard(google::protobuf::Closure* done)
:构造函数,初始闭包
explicit ClosureGuard(google::protobuf::Closure* done) : _done(done) {}
~ClosureGuard()
:析构函数,自动执行闭包的run方法
~ClosureGuard()
{if (_done) {_done->Run();}
}
void reset(google::protobuf::Closure* done)
:重新设置闭包,会先执行设置前的闭包
void reset(google::protobuf::Closure* done)
{if (_done) {_done->Run();}_done = done;
}
google::protobuf::Closure* release()
:释放闭包,此时析构函数不会执行闭包的run方法
google::protobuf::Closure* release()
{google::protobuf::Closure* const prev_done = _done;_done = NULL;return prev_done;
}
bool empty()
:检查闭包是否为空
bool empty() const { return _done == NULL; }
void swap(ClosureGuard& other)
:交换闭包
void swap(ClosureGuard& other) { std::swap(_done, other._done); }