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
반응형