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

标签 c++ c++11

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

例如考虑这段代码:

void doSomething()
{
    try
    {
        .....
        .....
        return;
        .....
        .....
        .....
        return;
        ......
    } catch ( ... )
    }
    myvariable--;
}

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

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

最佳答案

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

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

private:
    std::function<void ()> m_func;
    };

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

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

Live demo .

关于c++ - 当对象超出范围时执行一些代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41706284/

相关文章:

c++ - 与指针比较时,行使所有可能的控制路径意味着什么?

C++按值而不是按位置删除 vector 元素?

c++ - 我应该停止使用术语 C/C++ 吗?

c++ - CMake 无法在新版本中识别 C++ 编译器版本

c++ - 为什么 std::condition_variable 使调度不公平?

c++ - 通过连接 QObject 使用 std::future

c++ - VIM:浏览符号?如何?

c++ - 从 C++ 解析 Python 代码

c++ - 在 mac os 上执行程序时 libprotobuf 检查失败

c++ - 在纯 C++ (C++11) 中扩充一个类/应用一个方面