new로 생성한 객체를 스마트포인터에 저장하는 코드는 별도의 한 문장(effective c++ 17)
2015. 8. 20. 10:04ㆍ프로그래밍/Effective C++
728x90
728x90
정리
new로 생성한 객체를 스마트 포인터로 넣는 코드는 별도의 한 문장으로 만들자.
이것이 안 되어 있으면, 예외가 발생될 때 디버깅 하기 힘든 자원 누출이 초래될 수 있다.
예제
해당 코드의 경우 컴파일이 된다.
문제점
함수의 매개변수로 넘겨지는 인자를 평가(evalutate)
: priority() 호출 ->“new Widget” 표현식 실행 -> shared_ptr 생성자 호출
연산이 호출되는 순서는 컴파일러 제작사마다 다르다.
※ 자바 및 C#은 매개변수의 평가 순서가 특정하게 고정되어있다.
priority()가 두 번째로 호출 되고 예외가 발생했다면???
new Widget은 누수!!!
해결
따로!
728x90
반응형
'프로그래밍 > Effective C++' 카테고리의 다른 글
함수에서 객체 반환시 참조로 X(effective c++ 21) (0) | 2015.08.23 |
---|---|
클래스 설계는 타입 설계와 같이 보자(effective c++ 19) (0) | 2015.08.20 |
인터페이스 설계방법. 제대로는 쉽게, 엉터리론 어렵게(effective c++ 18) (0) | 2015.08.20 |
new/delete 형태 맞추기(effective c++ 16) (0) | 2015.08.20 |
자원관리 클래스의 자원은 접근 가능하게(effective c++ 15) (0) | 2015.08.20 |
자원관리 클래스의 복사 동작에 대해(effective c++ 14) (0) | 2015.08.12 |
템플릿으로 만들어진 기본 클래스 접근하기(effective c++ 43) (0) | 2015.08.07 |