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完美实现

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐