여기서 "그만" 이라는 뜻은, "적격"이다라는 뜻이다.
왜 객체가 적격일까?
그 이유는 스택에 올라간 객체는 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
왜 객체가 적격일까?
그 이유는 스택에 올라간 객체는 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
'책 정리 > Effective C++ 3판' 카테고리의 다른 글
항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자. (0) | 2008.06.04 |
---|---|
항목 17: new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자 (0) | 2008.06.03 |
항목 16: new 및 delete를 사용할 때는 형태를 반드시 맞추자 (0) | 2008.06.03 |
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2008.06.02 |
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자 (0) | 2008.06.01 |
항목 12: 객체의 모든 부분을 빠짐없이 복사하자 (0) | 2008.06.01 |
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자 (0) | 2008.06.01 |
항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자. (0) | 2008.05.31 |
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 (0) | 2008.05.31 |
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자. (0) | 2008.05.31 |
최근댓글