RAII(Resource Acquisition Is Initialization)란?

RAII는 자원을 클래스의 생성자에서 획득(Acquire)하고, 소멸자에서 해제(Release)하는 디자인 패턴이다.

뮤텍스 관리 클래스 예제


class Lock {
public:
    explicit Lock(Mutex* pm) : mutexPtr(pm) { lock(mutexPtr); } // acquire resource
    ~Lock() { unlock(mutexPtr); } // release resource

private:
    Mutex* mutexPtr;
};

위 코드에서 Lock 객체를 복사하면 어떤 일이 일어날까?

Mutex m;
Lock ml1(&m);
Lock ml2(ml1)

RAII 클래스에서 복사를 어떻게 처리할 것인가?

1. 복사 금지