부재 : 함수 내부의 동적 메모리 할당은 auto_ptr(의 성격으로 이해하면 더 좋을듯) 을 사용 해라!
이유
1. 소멸자는 객체 소멸시 반드시 호출 되는 성질을 이용하기 때문이다.
(소멸자가 호출 안되는 에외도 있으나, 그건 차후에 설명하겠다고 스캇은 말한다.)
구현 방법
1. 동적메모리 할당시 반환되는 메모리를 인자로 같는 객체의 생성자를 만들고, 소멸자에 이 인자를 지워 준다.
효과
1. 함수 내부에서 예외가 발생하여, 함수 루틴이 종류가 되어도 객체는 소멸되기 때문에 삭제가 된다.
대표적 사례
1. 기본 지원되는 auto_ptr 을 사용하면 손쉽게 구현 가능하다.
2. auto_ptr 에 대해서 인터넷 검사면, 그 개념이 잡힐것이다. 간단한것은 스스로 만들어 써도 되지만 MEC++ 읽는 사람이라면, 최소한의 클래스 보정은 해야 한다는것을 알수 있을 것이다.
auto_ptr 관련
1. http://yesarang.tistory.com/35
2. http://www.memorycarrier.com/old_www/y2k2/auto_ptr.html
3. http://kldp.org/node/63416
4. http://www.filewiki.net/tc/entry/stdauto_ptr-Smart-Pointer-%EC%9D%B4%EC%A7%80%EB%A7%8C
5. http://www.winapi.co.kr/clec/cpp4/36-3-2.htm
등등 검색하면 주의점과 그 사용법에 대해서 충분히 알수 있을것이다.
코드 : babo_ptr
1. 리로스 획득을 맡는 클래스의 생성자에서 예외가 발생하면 어떻게 될까요?
2. 소멸자에서 리소스를 자동으로 해제하다가 예외가 발생하면 어떻게 될까요?
3. 생성자와 소멸자에 특수한 테크닉이 필요한것은 아닐까요?
이유
1. 소멸자는 객체 소멸시 반드시 호출 되는 성질을 이용하기 때문이다.
(소멸자가 호출 안되는 에외도 있으나, 그건 차후에 설명하겠다고 스캇은 말한다.)
구현 방법
1. 동적메모리 할당시 반환되는 메모리를 인자로 같는 객체의 생성자를 만들고, 소멸자에 이 인자를 지워 준다.
효과
1. 함수 내부에서 예외가 발생하여, 함수 루틴이 종류가 되어도 객체는 소멸되기 때문에 삭제가 된다.
대표적 사례
1. 기본 지원되는 auto_ptr 을 사용하면 손쉽게 구현 가능하다.
2. auto_ptr 에 대해서 인터넷 검사면, 그 개념이 잡힐것이다. 간단한것은 스스로 만들어 써도 되지만 MEC++ 읽는 사람이라면, 최소한의 클래스 보정은 해야 한다는것을 알수 있을 것이다.
auto_ptr 관련
1. http://yesarang.tistory.com/35
2. http://www.memorycarrier.com/old_www/y2k2/auto_ptr.html
3. http://kldp.org/node/63416
4. http://www.filewiki.net/tc/entry/stdauto_ptr-Smart-Pointer-%EC%9D%B4%EC%A7%80%EB%A7%8C
5. http://www.winapi.co.kr/clec/cpp4/36-3-2.htm
등등 검색하면 주의점과 그 사용법에 대해서 충분히 알수 있을것이다.
코드 : babo_ptr
질문
1. 리로스 획득을 맡는 클래스의 생성자에서 예외가 발생하면 어떻게 될까요?
2. 소멸자에서 리소스를 자동으로 해제하다가 예외가 발생하면 어떻게 될까요?
3. 생성자와 소멸자에 특수한 테크닉이 필요한것은 아닐까요?
'책 정리 > More Effective C++ 1판' 카테고리의 다른 글
항목 14 : 예외지정 기능은 냉철하게 사용 하자 (0) | 2008.05.19 |
---|---|
항목 13 : 발생한 예외는 참조자로 받아내자. (0) | 2008.05.19 |
항목 12 : 예외 발생이 매개변수 전달 혹은 가상 함수 호출과 어떻게 다른지를 이해하자. (0) | 2008.05.18 |
항목 11 : 소멸자에서는 예외가 탈출하지 못하게 하자. (0) | 2008.05.16 |
항목 10 : 생성자에서는 리소스 누수가 일어나지 않게 하자. (0) | 2008.05.16 |
궁극의 예외처리 (0) | 2008.05.16 |
항목 8 : new 와 delete의 의미를 정확히 구분하고 이해하자 (0) | 2008.05.15 |
항목 7 : &&, ||, 혹은 , 연산자는 오버로딩 대상이 절대로 아니다 (1) | 2008.05.15 |
항목 6 : 증가 및 감소 연산자의 전위/후위 형태를 반드시 구분하자 (0) | 2008.05.15 |
항목 5 : 사용자 정의 타입변환 함수에 대한 주의를 놓지 말자. (0) | 2008.05.15 |
최근댓글