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
반응형
'Program Language > C & C++' 카테고리의 다른 글
[C++] 변수 묶어 사용하기 (pair, tuple) (0) | 2021.11.15 |
---|---|
[C++] file in/out (0) | 2021.11.08 |
[C++] std::thread 종료 (abort() has been called) (0) | 2021.10.26 |
[C++] 스마트 포인터 (0) | 2021.10.25 |
[C++] emplace_back (0) | 2021.10.25 |