Effective C++
Chapter 1 C++에 왔으면 C++의 법을 따릅시다
항목 1: C++를 언어들의 연합체로 바라보는 안목은 필수
항목 2: #define을 쓰려거든 const, enum, inline을 떠올리자
항목 3: 낌새만 보이면 const를 들이대 보자!
항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자
Chapter 2 생성자, 소멸자 및 대입 연산자
항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자
항목 6: 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해 버리자
항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자
항목 8: 예외가 소멸자를 떠나지 못하도록 붙들어 놓자
항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자
항목 10: 대입 연산자는 *this의 참조자를 반환하게 하자
항목 11: operator=에서는 자기대입에 대한 처리가 빠지지 않도록 하자
항목 12: 객체의 모든 부분을 빠짐없이 복사하자
Chapter 3 자원 관리
항목 13: 자원 관리에는 객체가 그만!
항목 14: 자원 관리 클래스의 복사 동작에 대해 진지하게 고찰하자
항목 15: 자원 관리 클래스에서 관리되는 자원은 외부에서 접근할 수 있도록 하자
항목 16: new 및 delete를 사용할 때는 형태를 반드시 맞추자
항목 17: new로 생성한 객체를 스마트 포인터에 저장하는 코드는 별도의 한 문장으로 만들자
Chapter 4 설계 및 선언
항목 18: 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자
항목 19: 클래스 설계는 타입 설계와 똑같이 취급하자
항목 20: '값에 의한 전달'보다는 '상수객체 참조자에 의한 전달' 방식을 택하는 편이 대개 낫다
항목 21: 함수에서 객체를 반환해야 할 경우에 참조자를 반환하려고 들지 말자
항목 22: 데이터 멤버가 선언될 곳은 private 영역임을 명심하자
항목 23: 멤버 함수보다는 비멤버 비프렌드 함수와 더 가까워지자
항목 24: 타입 변환이 모든 매개변수에 대해 적용되어야 한다면 비멤버 함수를 선언하자
항목 25: 예외를 던지지 않는 swap에 대한 지원도 생각해 보자
Chapter 5 구현
항목 26: 변수 정의는 늦출 수 있는 데까지 늦추는 근성을 발휘하자
항목 27: 캐스팅은 절약, 또 절약! 잊지 말자
항목 28: 내부에서 사용하는 객체에 대한 "핸들"을 반환하는 코드는 되도록 피하자
항목 29: 예외 안전성이 확보되는 그날 위해 싸우고 또 싸우자!
항목 30: 인라인 함수는 미주알고주알 따져서 이해해 두자
항목 31: 파일 사이의 컴파일 의존성을 최대로 줄이자
Chapter 6 상속, 그리고 객체 지향 설계
항목 32: public 상속 모형은 반드시 "is-a(...는 ...의 일종이다)"를 따르도록 만들자
항목 33: 상속된 이름을 숨기는 일은 피하자
항목 34: 인터페이스 상속과 구현 상속의 차이를 제대로 파악하고 구별하자
항목 35: 가상 함수 대신 쓸 것들도 생각해 두는 자세를 시시때때로 길러 두자
항목 36: 상속받은 비가상 함수를 파생 클래스에서 재정의하는 것은 절대 금물!
항목 37: 어떤 함수에 대해서도 상속받은 기본 매개변수 값은 절대로 재정의하지 말자
항목 38: "has-a(...는 ...를 가짐)" 혹은 "is-implemented-in-terms-of(...는 ...를 써서 구현됨)"를 모형화할 때는 객체 합성을 사용하자
항목 39: private 상속은 심사숙고해서 구사하자
항목 40: 다중 상속은 심사숙고해서 사용하자
Chapter 7 템플릿과 일반화 프로그래밍
항목 41: 템플릿 프로그래밍의 천릿길도 암시적 인터페이스와 컴파일 타임 다형성부터
항목 42: typename의 두 가지 의미를 제대로 파악하자
항목 43: 템플릿으로 만들어진 기본 클래스 안의 이름에 접근하는 방법을 알아 두자
항목 44: 매개변수에 독립적인 코드는 템플릿으로부터 분리시키자
항목 45: "호환되는 모든 타입"을 받아들이는 데는 멤버 함수 템플릿이 직방!
항목 46: 타입 변환이 바람직할 경우에는 비멤버 함수를 클래스 템플릿 안에 정의해 두자
항목 47: 타입에 대한 정보가 필요하다면 특성정보 클래스를 사용하자
항목 48: 템플릿 메타프로그래밍, 하지 않겠는가?
Chapter 8 new와 delete를 내 맘대로
항목 49: new 처리자의 동작 원리를 제대로 이해하자
항목 50: new 및 delete를 언제 바꿔야 좋은 소리를 들을지를 파악해 두자
항목 51: new 및 delete를 작성할 때 따라야 할 기존의 관례를 잘 알아 두자
항목 52: 위치지정 new를 작성한다면 위치지정 delete도 같이 준비하자
Chapter 9 그 밖의 이야기들
항목 53: 컴파일러 경고를 지나치지 말자
항목 54: TR1을 포함한 표준 라이브러리 구성요소와 편안한 친구가 되자
항목 55: Boo子有親! 부스트를 늘 여러분 가까이에
부록 A 'Effective C++'이후의 이야기들
부록 B 2판 및 3판의 항목 대응표
More Effective C++
Chpater 1 기본 개념들
항목 1 :포인터(pointer)와 참조자(reference)를 구분하자
항목 2 : 가능한 C++ 스타일의 캐스트를 즐겨 쓰자
항목 3 : 배열과 다형성은 같은 수준으로 놓고 볼 것이 아니다
항목 4 : 쓸데 없는 기본 생성자는 그냥 두지 말자
Chpater 2 연산자(Operators)
항목 5 : 사용자 정의 타입변환 함수에 대한 주의를 놓지 말자
항목 6 : 증가 및 감소 연산자의 전위(prefix)/후위(postfix) 형태를 반드시 구분하자
항목 7 : &&, ||, 혹은 . 연산자는 오버로딩 대상이 절대로 아니다
항목 8 : new와 delete의 의미를 정확히 구분하고 이해하자
Chpater 3 예외(Exceptions)
항목 9 : 리소스 누수를 피하는 방법의 정공(正攻)은 소멸자이다
항목 10 : 생성자에서는 리소스 누수가 일어나지 않게 하자
항목 11 : 소멸자에서는 예외가 탈출하지 못하게 하자
항목 12 : 예외 발생이 매개변수 전달 혹은 가상 함수 호출과 어떻게 다른지를 이해하자
항목 13 : 발생한 예외는 참조자로 받아내자
항목 14 : 예외 지정(exception specification) 기능은 냉철하게 사용하자
항목 15 : 예외 처리에 드는 비용에 대해 정확히 파악하자
Chpater 4 효율(Efficiency)
항목 16 : 뼛속까지 잊지 말자, 80-20 법칙!
항목 17 : 효율 향상에 있어 지연 평가(lazy evaluation)는 충분히 고려해 볼 만하다
항목 18 : 예상되는 계산 결과를 미리 준비하면 처리비용을 깎을 수 있다
항목 19 : 임시 객체의 원류(原流)를 정확히 이해하자
항목 20 : 반환값 최적화(return value optimization)가 가능하게 하자
항목 21 : 오버로딩은 불필요한 암시적 타입변환을 막는 한 방법이다
항목 22 : 단독 연산자(op) 대신에 =이 붙은 연산자(op=)를 사용하는 것이 좋을 때가 있다
항목 23 : 정 안 되면 다른 라이브러리를 사용하자!
항목 24 : 가상 함수, 다중 상속, 가상 기본 클래스, RTTI에 들어가는 비용을 제대로 파악하자
Chpater 5 유용하고 재미있는 프로그래밍 기법들(Techniques)
항목 25 : 생성자 함수와 비(非)멤버 함수를 가상 함수처럼 만드는 방법
항목 26 : 클래스 인스턴스의 개수를 의도대로 제한하는 방법
항목 27 : 힙(heap)에만 생성되거나 힙에는 만들어지지 않는 특수한 클래스를 만드는 방법
항목 28 : 스마트 포인터(Smart Pointer)
항목 29 : 참조 카운팅(Reference Counting)
항목 30 : 프록시(Proxy) 클래스
항목 31 : 함수를 두 개 이상의 객체(타입)에 대해 가상 함수처럼 동작하도록 만들기
Chpater 6 이외의 이야기들(Miscellany)
항목 32 : 미래 지향적인 프로그래머가 되자
항목 33 : 상속 관계의 말단에 있지 않은 (non-leaf) 클래스는 반드시 추상 클래스로 만들자
항목 34 : 한 프로그램에서 C++와 C를 함께 사용하는 방법을 이해하자
항목 35 : C++ 언어의 최신 표준안과 표준 라이브러리에 대해 익숙해지자
추천하는 읽을거리
auto_ptr 클래스 템플릿의 구현