C++
C++) RAII 디자인 패턴
전문 컨설턴트
2020. 5. 28. 16:53
RAII: Resource Acquisition Is Initialization.
- 리소스를 초기화 할 때 메모리 할당까지 이루어지는 방식이다.
- RAII를 기반으로 만들어진게 shared_ptr, unique_ptr이 있다.
string을 예로 들어 설명 하겠다.
class String {
public:
String() {
new char[256];
}
~String() {
delete[] char;
}
}
위 클래스 String은 RAII를 따르도록 구현되었다.
String의 생성자에서 메모리를 할당하고, String의 소멸자에서 메모리를 제거한다.
이렇게 하므로서 얻는 장점은 다음과 같다.
int main() {
char* str = new char[256];
...
// 함수 실행 도중 error 발생
return error;
// 메모리 leak 발생 (아래 delete를 하기 전 return 함)
...
delete[] str;
return success;
}
int main() {
String str;
...
// error 발생
return error;
// 함수에서 나가면서 변수 str의 소멸자 호출 (메모리 leak 방지)
...
return success;
}
- 실행 도중 오류가 나서 delete를 못해주더라도 소멸자에서 delete를 부르니 걱정 없다.