C++ 资源管理 —— RAII

RAII:在构造函数中申请资源,在析构函数中释放资源。

1. RAII 自动实现锁资源的释放

void bad() {
    m.lock();
    f();
    if (COND) return;
    m.unlock();
}

显然如果提前返回,会导致死锁。

class SafeMutex {
public:
    SafeMutex(std::mutex& m) : _m(m) {
        m.lock();
    }
    ~SafeMutex() {
        _m.unlock();
    }
private:
    std::mutex& _m;
}

void good() {
    SafeMutex mutex(m);
    foo();
    if (COND) return;    // 异常发生时,依然会自动调用锁资源的自动释放;
}
原文地址:https://www.cnblogs.com/mtcnn/p/9421044.html