RAII(Resource Acquisition is Initialization) 디자인 패턴

이스·2020년 5월 3일
0

GC(Garbage Collector)를 제공하는 다른 많은 언어와 달리 C++은 프로그래머가 직접 resource를 관리 해주어야 한다.

따라서 메모리 누수(memory leak)의 위험이 곳곳에 도사리고 있다.


실수로 메모리 해제 코드를 작성하지 않을 수도 있고,

작성했다고 하더라도 exception 발생으로 코드가 끝까지 실행되지 않아 메모리 해제에 실패할 수도 있다.


메모리 누수로 인해 메모리 사용량이 계속 증가하다보면 메모리 부족으로 프로그램이 crash 될 수 있다.

이를 방지하고자 C++ 창시자인 Bjarne Stroustrup는 RAII(Resource Acquisition is Initialization) 디자인 패턴을 제안했다.


RAII란 객체의 생성과 동시에 자원을 할당하고 객체가 파괴될 때 자원을 해제하는 방법이다.


예외가 발생해서 예상치 못하게 함수를 빠져 나가더라도 함수 stack 내에서 선언된 모든 객체는 그 소멸자가 호출된다. (stack unwinding)

이 점을 이용하여 소멸자 안에 자원을 해제하는 코드를 작성하면 메모리 누수의 위험으로부터 해방될 수 있다.

0개의 댓글