我正在阅读 go 语言的defer语句。它允许您指定在函数结束时要采取的操作。例如,如果您有一个文件指针或资源,则无需使用每个可能的返回路径编写 free/delete,您只需指定一次 defer 函数。
看起来类似的东西最终可能会出现在 C++ 中(C++中的标准延迟/终结器实现是什么?,是否会有范围保护/范围退出习惯用法的标准化?)在此之前,使用具有析构函数进行回调?看起来局部变量的析构函数顺序是合理的,它也能很好地处理异常,尽管可能不会在信号上退出。
这是一个示例实现......有什么问题吗?
#include <iostream>
#include <functional>
using namespace std;
class FrameExitTask {
std::function<void()> func_;
public:
FrameExitTask(std::function<void()> func) :
func_(func) {
}
~FrameExitTask() {
func_();
}
FrameExitTask& operator=(const FrameExitTask&) = delete;
FrameExitTask(const FrameExitTask&) = delete;
};
int main() {
FrameExitTask outer_task([](){cout << "world!";});
FrameExitTask inner_task([](){cout << "Hello, ";});
if (1+1 == 2)
return -1;
FrameExitTask skipped_task([](){cout << "Blam";});
}
输出: Hello, world!
呼唤远方
暮色呼如
有只小跳蛙
相关分类