항목 26: 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자

2022. 3. 5. 21:57카테고리 없음

반응형

생성자 혹은 소멸자를 끌고 다니는 타입으로 변수를 정의하면 반드시 물게 되는 비용이 두 개 있습니다. 하나는 프로그램 제어 흐름이 변수의 정의에 닿을 때 생성자가 호출되는 비용이고, 또 하나는 그 변수가 유효범위를 벗어날 때 소멸자가 호출되는 비용입니다. 변수가 정의됐으나 사용되지 않은 경우에도 비용이 부과되는데, 이런 비용은 웬만한 경우가 아니면 물고 싶을 생각이 안 들 것입니다.

어떤 변수를 사용해야 할 때가 오기 전까지 그 변수의 정의를 늦추는 것은 기본이고, 초기화 인자를 손에 넣기 전까지 정의를 늦출 수 있는지도 둘러봐야 한다는 것입니다. 이렇게해야 쓰지도 않을 객체가 만들어졌다 없어지는 일이 생기지 않으며, 불필요한 기본 생성자 호출도 일어나지 않습니다. 덤으로 누가 보아도 그 변수의 의미가 명확한 상황에서 초기화가 이루어지기 때문에, 변수의 쓰임새를 문서화하는 데도 큰 도움이 됩니다.

루프문에 대해서는 어떻게 해야할까?

  • A 방법: 루프 바깥쪽에서 정의 - 생성자 1번 + 소멸자 1번 + 대입 n번
  • B 방법: 루프 안쪽에서 정의 - 생성자 n번 + 소멸자 n번

그러니까 이렇게 하세요.

  1. 대입이 생성자-소멸자 쌍보다 비용이 덜 들고
  2. 전체 코드에서 수행 성능에 민감한 부분을 건드리는 중이라고 생각하지 않는다면, 앞 뒤 볼 것 없이 B 방법으로 가는 것이 좋습니다.

출처 - Effective C++ (스콧 마이어스)

반응형