본문 바로가기

Effective C++

Effective C++ 효율! 항목 17. 효율 향상에 있어 지연평가는 충분히 고려해볼만하다! 1.참조 카운팅 class String{....} String s1 = "Hellow"; String s2 = s1; ->String의 복사생성자가 보통의 상식대로 만들어졌다면. s2는 s1으로 초기화된 이후에 s1과 s2가 "Hellow" 의 사본이 동시에 가지고 있게 된다. 이때, s2 와 s1이 동일한 값을 갖기 위해 new/strcpy이 수행되어야 하므로 실행비용이 만만찮게 든다. 하지만 지금까지는 s2의 존재이유가 없다(s1이 존재하기 때문에) 그렇기 때문에 존재이유가 없는 s2를 (결국 필요로 할때까지) 복사생성자 따위를 사용하여 복사해놓지 않는다. 만약, s1 스트링과 s2 스트링을 print 해야 하는 경우 굳이 s3 = s1.. 더보기
More Effective CPP! 항목 1. 포인터(pointer)와 참조자(reference)를 구분하자. 가장 쉽게 볼수 있는 차이점은 연산자의 차이다. 포인터의 경우 *과 ->을 쓰고 참조는 .을 쓴다. 개념상의 차이점은 포인터의 경우 null을 가르킬수 있고 참조의 경우 null을 가르키는 것은 참조라 볼수 없다. 이 때문에 참조는 개념상 null을 검사할 필요가 없어 유용하다. C 언어에는 참조의 개념은 생략되었는데 C++에 들어오면서 클래스가 생기면서 명확한 개념으로 자리 잡힌듯 하다. 항목 2. 가능한 C++ 스타일의 캐스트를 즐겨 쓰자. 단순한 C 스타일의 캐스트인 괄호()는 너무나도 범용적인 의미를 지녀서 해석상 오류가 생기기 쉽다. 더욱이 C++로 넘어오면서 클래스와 상속으로 인해 의미를 식별하기 힘든 경우도 생길수 있.. 더보기