자원 관리
항목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 손실됨
- 컴파일 순서는 컴파일러마다 다름
'Development > C|C++|C#' 카테고리의 다른 글
[C#]마우스 제어, 컨트롤(클릭, 위치 가져오기) (0) | 2017.01.12 |
---|---|
[Effective C++]4. 설계 및 선언 (0) | 2016.10.29 |
[C++]JSON 데이터 트리(Tree)스키마 파싱 논문 구현 (0) | 2016.10.19 |
[Effective C++]2. 생성자, 소멸자 및 대입 연산자 (0) | 2016.10.16 |
[Effective C++]1. C++에 왔으면 C++의 법을 따릅시다. (0) | 2016.10.14 |