C++ 资源管理 —— RAII

时间:2023-03-09 04:12:45
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; // 异常发生时,依然会自动调用锁资源的自动释放;
}