본문 바로가기
C,C++

[Effective C++]항목 17 : new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자.

by matters_ 2019. 8. 6.

요약 

  • 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);

위와 같이 명시적으로 분리해주면 보다 명확한 코드가 된다는 것이다.

댓글