RAII是想是c++之父提出的一种自动管理生命周期的思想,使用局部变量来管理动态分配的内容,它充分的利用了C++语言局部对象自动销毁的特性来控制资源的生命周期。
go语言中的defer就是这种实现,提前定义一个函数,当作用域结束的时候自动执行,今天我们就来实现这个小功能
// 通过RAII思想实现go的Defer
class Defer {
public:
Defer(const std::function<void()>&& fun) : task(std::move(fun)) {}
~Defer() {
task();
}
private:
std::function<void()> task;
};
上面的功能就实现了最基本的defer功能,在构造时确定函数,析构时执行我们给它的函数,下面测试代码
#include"defer.hpp"
int main() {
Defer d([] {std::cout << "11 11"; });
std::cout << "55";
return 0;
}
输出是5511 11完美实现