RAII(Resource Acquisition Is Initialization),即资源获取就是初始化,是一种管理资源的机制。

如管理new操作符的资源:

class A
{
public:
int *p;

A(int n)
{
p = new int[n];
}
~A()
{
delete p;
}
};

int main()
{
A a(10);
// a.p
return 0;
}

只写了一个简单的示例。

一个经典的案例:lock_guard类,源代码如下

// CLASS TEMPLATE lock_guard
template<class _Mutex>
class lock_guard
{ // class with destructor that unlocks a mutex
public:
using mutex_type = _Mutex;

explicit lock_guard(_Mutex& _Mtx)
: _MyMutex(_Mtx)
{ // construct and lock
_MyMutex.lock();
}

lock_guard(_Mutex& _Mtx, adopt_lock_t)
: _MyMutex(_Mtx)
{ // construct but don't lock
}

~lock_guard() noexcept
{ // unlock
_MyMutex.unlock();
}

lock_guard(const lock_guard&) = delete;
lock_guard& operator=(const lock_guard&) = delete;
private:
_Mutex& _MyMutex;
};

实例化的时候加锁,生命周期结束的时候自动解锁。