WhenLeaveDo

我相當討厭 goto,幾乎不用它。常見的 goto 用法是把清理資源的程式碼放到函數尾端,程式執行過程一遇到問題,就 goto 到該資源清理區,然後離開。

這是很常見的需求,我希望利用 C++ 語言特性來實作,需求如下:

  • 待清理的「資源」不固定
  • 函數跳離前(包含 Exception)需保證資源被清理

WhenLeaveDo 的用法:

WhenLeaveDo cleanup([]()  
{
    // Cleanup code.
});

實作

template <typename Task>  
class WhenLeaveDo {  
    WhenLeaveDo(Task t) : task_{t} {}
    ~WhenLeaveDo() { if (task_) task_(); }
}

Living in Taiwan. Dancing with C++ and C#. Playing Xamarin. Visual Studio is the most powerful IDE on earth. Learn what I am doing these days at: https://samtsai.org/now/