在函数的整个生命周期内都有一个对象在堆栈上

Have an object on stack not for the entire lifetime of the function

我有一个函数foo()获取critical section做一些处理并释放critical section。现在有多个控制流所以为了避免记住释放锁我想把它包装在 class 中,这样析构函数就会自动释放锁。

class Lock
{
public:
    LPCRITICAL_SECTION m_a;
    Lock(CRITICAL_SECTION *a):m_a(a){EnterCriticalSection(a);}
    ~Lock(){LeaveCriticalSection(m_a);}
};

现在的问题是我有控制流,我想获取锁,做一些事情然后释放它,然后继续其他processing.So我不想等到释放锁当销毁将启动时函数结束 in.Is 有一种方法可以实现这一点。

使用本地块:

void myFunction() {
    // do stuff
    {
        Lock l(&critsec);
        // do stuff needing lock
    }
    // do more stuff
}