Program Language/C & C++
[C++] RAII Pattern
야곰야곰+책벌레
2021. 10. 26. 18:29
728x90
반응형
C++ 에는 RAII (Resource Acquisition Is Initialization)이라는 패턴이 있다. 리소스의 획득은 초기화다라는 뜻인데 보통 RAII Design Pattern이라고 한다.
예를 들자면, lock_gaurd class가 있다.
class lock_guard
{ // class with destructor that unlocks mutexes
public:
explicit lock_guard(_Mutexes&... _Mtxes)
: _MyMutexes(_Mtxes...)
{ // construct and lock
_STD lock(_Mtxes...);
}
lock_guard(_Mutexes&... _Mtxes, adopt_lock_t)
: _MyMutexes(_Mtxes...)
{ // construct but don't lock
}
~lock_guard() _NOEXCEPT
{ // unlock all
_For_each_tuple_element(
_MyMutexes,
[](auto& _Mutex) _NOEXCEPT { _Mutex.unlock(); });
}
lock_guard(const lock_guard&) = delete;
lock_guard& operator=(const lock_guard&) = delete;
private:
tuple<_Mutexes&...> _MyMutexes;
};
lock_guard는 생성할 때 mutex를 가져와서 lock()을 잡는다. 그리고 소멸할 때 unlock()으로 해제해주게 된다.
그 외에도 unique_ptr, shared_ptr도 비슷한 동작을 한다. 이 패턴은 메모리 관리가 어려운 C++에서 메모리 누수(Memory leak)를 막을 수 있다.
728x90
반응형