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를 부르니 걱정 없다.
'C++' 카테고리의 다른 글
C++) Reader-Writer 문제로 본 mutex와 condition variable (0) | 2020.06.29 |
---|---|
C++) std::bind 와 std::placeholders (std::placeholders::_1, std::placeholders::_2, ...) (0) | 2020.06.24 |
(C언어) epoll 정의 (0) | 2019.12.02 |
[프로그래머스] (C++) 점프와 순간이동 (0) | 2019.12.02 |
[프로그래머스] (C++) 최댓값과 최솟값 (0) | 2019.11.28 |