当对象超出范围时执行一些代码

Yia*_*lis 7 c++ c++11

有时我想确保在从另一个函数返回之前执行了某个函数调用,或者一个整数被递减。

例如考虑这个代码:

void doSomething()
{
    try
    {
        .....
        .....
        return;
        .....
        .....
        .....
        return;
        ......
    } catch ( ... )
    }
    myvariable--;
}
Run Code Online (Sandbox Code Playgroud)

我想确保 myvariable 总是递减,无论是否有异常或返回调用。在 C++ 中是否有任何内置对象,或者我应该创建自己的类来接受 std::function 并在对象超出对象析构函数的范围时执行它?

例如,在 C# 中有 try..catch...finally 块,在 finally 块中,您可以在从函数返回之前放置您想要执行的任何代码。

Alg*_*ius 6

您可以在其析构函数中编写自己的类来执行某些操作。

class DoAction
    {
public:
    DoAction (std::function<void ()> func) : m_func (func)
        {
        }
    ~DoAction ()
        {
        m_func ();
        }

private:
    std::function<void ()> m_func;
    };
Run Code Online (Sandbox Code Playgroud)

然后,通过以下方式创建它的对象:

DoAction action([&] {/*Code that you want to be executed upon leaving the scope.*/});
Run Code Online (Sandbox Code Playgroud)

现场演示