[C++] 스터디 CPPALOM 14주차: Effective C++ Item 26~35
파워 포인트 파일(.pptx)을 Markdown으로 변환하여 업로드하였음) # <br>CPPALOM # <br>14주차 – Effective C++ item 26~35 한수빈 # <br>항목26: 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자 * 변수는 사용되기 직전에 정의되어야 한다. * 예외 등으로 인해 해당 변수가 사용되지 않음에도 소멸자 등이 호출되는 비용이 발생되기 때문이다! * 루프에서 변수를 다루는 방법 * 루프 바깥쪽에 정의하기: 생성자 1번 + 소멸자 1번 + 대입 n번 * 루프 안쪽에 정의하기: 생성자 n번 + 소멸자 n번 ```C++ Widget w; for (int i = 0; i < n; ++i) { w = i; ... } ``` ```C++ for (int i = 0; i < n; ++i) { Widget w(i); } ``` # <br>항목27: 캐스팅은 절약, 또 절약! 잊지 말자 * 구형 스타일의 캐스트를 사용하지 말자! * dynamic_cast는 성능 저하가 있으므로, 이를 최소화하자! * 최악: 폭포식 dynamic_cast * 수빈의 첨언: * 상속 구조에서 특정한 타입인지를 반드시 알아야되는 구조라면, 리스코프 치환 원칙(LSP) 위배일 가능성이 높다. dynamic_cast는 필요한 경우가 있지만 이에 주의하자! ```C++ for(auto iter = winPtrs.begin(); iter != winPtrs.end(); ++iter) { if(SpecialWindow1 *psw1 = dynamic_cast<SpecialWindow*>(iter->get())) {...} else if (SpecialWindow2 *psw2 = dynamic_cast<SpecialWindow2*>(iter->get())) ...