요약
- new로 생성한 객체를 스마트 포인터로 넣는 코드는 별도의 한 문장으로 만들자! 아니면 예외가 발생될 때 디버깅하기 힘든 자원 누출이 초래될수 있다.!
쉽게 말해서 다음과 같은 코드에서
processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());
컴파일러는
- priority를 호출하고
- new Widget을 실행하고
- tr1::shared_ptr 생성자를 호출
하는 3가지 일을 하는데 컴파일러에 따라 위 순서가 뒤죽박죽 될 수 있으니
std::tr1::shared_ptr<Widget> pw(new Widget); //new로 생성한 객체를 스마트 포인터에 담는 코드를 하나의 독립적인 문장으로 만든다.
processWidget(pw, priority);
위와 같이 명시적으로 분리해주면 보다 명확한 코드가 된다는 것이다.
'C,C++' 카테고리의 다른 글
[C++] 문법 char to string , string to char 변환 (0) | 2019.10.16 |
---|---|
[C++, STL] <algorithm> std::fill 함수 사용하기 (feat. std::vector, 1차원 배열, 2차원 배열 초기화) (0) | 2019.09.25 |
[Effective C++]항목 15 : 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자. (0) | 2019.08.05 |
[Effective C++] 항목 19 : 클래스 설계는 타입 설계와 똑같이 취급하자. (0) | 2019.08.01 |
[Effective C++] 항목 13 : 자원 관리에는 객체가 그만! (0) | 2019.07.31 |
댓글