[ Effective C++ ] 정리 모음집
" C++ 프로그래머의 필독서, 스콧 마이어스의 Effective C++ 를 읽고 내용 요약 / 정리 "
" 자원 누출 가능성을 최대한 낮추자 "
- 예외가 발생했을 때 디버깅하기 힘든 자원 누출을 초래할 수 있으므로 new로 생성한 객체를 스마트 포인터로 넣는 코드는 별도의 한 문장으로 만들자!
processWidget(shared_ptr<Widget>(new Widget), priority());
다음과 같은 코드에서 컴파일러는 매개변수에 대한 컴파일러의 인자 평가를 통해 순서를 정함
- 컴파일러 제작사 마다 다르다는게 문제 **
- 자바, C#등은 고정적, C++은 그러지 못함.
컴파일러는 아래와 같은 연산을 수행 해야 함
- priority 호출
- new Widget 실행
- shared_ptr 생성자 호출
new Widget의 결과는 shared_ptr의 생성자에 건내져야 하기 때문에 shared_ptr의 생성자 호출 연산 보다는 먼저 실행이 되겠지만 priority의 순서는 무작위... 만약 순서가 아래 처럼 정해진다면??
컴파일러는 아래와 같은 연산을 수행 해야 함
- new Widget 실행
- priority 호출
- shared_ptr 생성자 호출
📢 priority 호출 부분에서 예외가 발생한다면 new Widget으로 만들어진 자원이 유실될 수 있음
📌 해결 방법
[해결 방법 코드]
shared_ptr<Widget>pw(new Widget);
processWidget(pw, priority());