여기서 "그만" 이라는 뜻은, "적격"이다라는 뜻이다.

왜 객체가 적격일까?
그 이유는 스택에 올라간 객체는 Scope(존재 할수 있는 범위)가 있어, 자신의 Scope를 벗어나면, 소멸자가 호출이 된다. 이 소멸자에서 자원을 반환해 주는 코드를 넣어주면, 자원의 얻고, 반환을 자동화 시킬수가 있기 때문이다.

자원 관리 객체의 기본적인 구조
처음은 생성자에서 동적메모리 할당으로 얻은 주소값를 인자로 객체를 생성과 동시에 초기화 한다. 자원 획득은 초기화!(Resource Acquisition Is Initization : RAII, 비야네 스트롭스트룹 은 이 용어를 처음 제시했고, TC++PL의 14장에서 그 견해를 들을수 있다고 한다.)

으로 소멸자에서 이 자원을 delete 해 준다.


이렇게 하면 정말 자원 관리가 쉬워 지나?
써본 사람만이 안다. .. 정말 편하다! 그렇다고 단점이 없는것은 아니다. RAII 방식 객체를 복사 할 경우, 그 복사 처리에 대한 로직이 있어야만 한다!(이건 절대적이지는 않지만, ... 안전한 코딩을 위해선 필요하다고 나는 생각한다)


이런 기본적인 구조로 많은 클래스가 있을것 같은데?
많이 사용되는 클래스로는 std::auto_ptr, tr1::shared_ptr 가 있다.


이런 클래스의 주의점은 무엇이 있나?
동적으로 배열을 할당했을 때 소멸자는 delete[] 가 아닌 delete이다, boost::scoped_array 와 boost::shared_array가 있으니 사용법은 boost에 가서 찾아 보도록!


이것만은 잊지 말자!
1. 자원 누출을 막기 위해 RAII 객체를 이용하자
2. std::auto_ptr 은 소유권 계념이 있으니, 이 부분은 꼭 알아 두어야 한다.

기본적인 소스 코드

관련 링크
http://rookiecj.tistory.com/2
http://kelly.springnote.com/pages/565258
http://ineptitude.tistory.com/entry/Study-Effective-C-%EC%9E%90%EC%9B%90-%EA%B4%80%EB%A6%AC%EB%8A%94-%EA%B0%9D%EC%B2%B4%EB%A1%9C
posted by 농사를 짓는 게임 프로그래머 최익필

댓글을 달아 주세요