본문 바로가기
Development/C|C++|C#

[Effective C++]3. 자원 관리

by True Life 2016. 10. 19.


자원 관리


항목13. 자원관리는 수동보다 스마트 객체 사용이 바람직하다.

 - delete 부분전 예외 or return 등으로 인한 도달 실패 → 자원 누수 발생

 - auto_ptr : 자동소멸 & 복사시 원본 제거(유일성 보장)

 - shared_ptr(=GC) : 참조 카운트 스마트 포인터(RCSP) → 카운팅 방식

 * Resource Acqusition Is Initialization (RAII) : auto_ptr / shared_ptr

 - 동적 할당 배열시에도 delete (delete [] X)

 * shared_array (boost)

 - 자원관리를 보다 확실히 하기 위한 smart_ptr 자체를 반환하는 것도 고려


항목14. Mutex와 같은 자원관리 클래스의 unlock & 복사 함수 동작

 - Mutex_ptr을 가진 class(자원관리용)의 unlock → 소멸자 → { - } (block화)

                                                                              *자동소멸 & unlock

 - 복사시 동작 : ① 복사 금지 ② 참조 카운팅(RCSP) ③ '깊은' 복사 ④ 소유권 전이(auto_ptr)

                         *uncopyable 상속                     *자원까지 복사 - 새로운 메모리


항목15 : RAII의 명시적/암시적 변환 함수

 * 일반적인 스마트포인터들은 -> / * 등이 오버로딩 되어 있음.

 - 암시적 변환 : operator classname() const { = 실수↑

 - 명시적 반환 : get() = 불편함


항목16 : new / delete의 배열 형태

 - 객체 배열이 힙에서 size obj1 obj2 ... 형태로 저장됨

 - delete도 반드시 []를 붙여 size 판단을 하게 해야함

 * 복수 배열은 메모리 초반 size 로 판단


항목17 : new로 생성한 객체를 스마트 포인터로 사용하는 문장은 별도 1문장으로 구성

 - func(new Widget, method()) → method()에서 Exception시 new Widget 손실됨

 - 컴파일 순서는 컴파일러마다 다름