我相當討厭 goto,幾乎不用它。常見的 goto 用法是把清理資源的程式碼放到函數尾端,程式執行過程一遇到問題,就 goto 到該資源清理區,然後離開。 這是很常見的需求,我希望利用 C++ 語言特性來實作,需求如下: 待清理的「資源」不固定 函數跳離前(包含 Exception)需保證資源被清理 WhenLeaveDo 的用法: WhenLeaveDo cleanup([]() { // Cleanup code. }); 實作 template <typename Task> class WhenLeaveDo { WhenLeaveDo(Task t) : task_{t} {} ~WhenLeaveDo() { if