#1. [레거시 C++ 개체 지향] 생성자
기본 생성자가 필요하다면 명시적으로 구현하고, 필요없다면 못쓰게 만들어라. 값 생성자에서는 필요한 인자를 모두 나열하고 초기화하라. 인자가 1개인 값 생성자(형변환 생성자)는 explicit로 암시적 형변환을 차단하라. 암시적 복사 생성자가 정상...
기본 생성자가 필요하다면 명시적으로 구현하고, 필요없다면 못쓰게 만들어라. 값 생성자에서는 필요한 인자를 모두 나열하고 초기화하라. 인자가 1개인 값 생성자(형변환 생성자)는 explicit로 암시적 형변환을 차단하라. 암시적 복사 생성자가 정상...
멤버 변수가 1개라면, 암시적 복사 대입 연산자가 정상 동작하도록 멤버 변수 정의시 스마트 포인터(shared_ptr 등)를 사용하고, 필요없다면 못쓰게 만들어라. 멤버 변수가 2개 이상이라면, 복사 대입 연산자를 예외에 안전하도록 swap()으로 구현하고, ...
획득된 자원은 꼭 소멸시켜라. 암시적 소멸자가 정상 작동하도록 멤버 변수 정의시 스마트 포인터(auto_ptr, unique_ptr, shared_ptr 등)를 사용하라. 다형 소멸이 필요하면 부모 개체에 가상 소멸자를 사용하라.(가상 소멸자가 아니면 ...
은근슬쩍 만들어 지는 것들은 유효한지 검토하고, 유효하지 않다면 사용하지 못하게 막아라.
개체는 new-delete 쌍으로 생성/소멸 하라. 배열은 new[]-delete[] 쌍으로 생성/소멸하라. new[]한 것을 delete 만 하면, 메모리 릭이 발생한다. 꼭 delete[]하라. delete는 널 값이면 아무 작업 안한다. 괜히 널검...
멤버 변수 초기화시, 생성후 대입하지 말고 초기화 리스트를 사용하라.(초기화 리스트의 순서는 멤버 변수 선언 순서에 맞춰라.) 생성자에서 필요한 인자를 모두 나열하고 초기화하라. 메모리 패딩을 고려하여 멤버 변수 선언 순서를 정하라. 암시적 복사...
PImpl 이디엄은 멤버 변수 접근 부하, 메모리 공간 부하, 과도한 힙 사용의 부하가 있으니, 상황에 맞게 도입하라.
멤버 변수를 수정하지 않는다면, 상수 멤버 함수로 작성하라. 정적 멤버 함수는 obj.f() 가 아닌 T::f() 와 같이 호출하라. 자식 개체에서 부모 개체의 비 가상 함수를 재정의 하지 마라. 가상 함수를 정의하면 가상 함수 테이블을 위한 추...
부모 개체의 멤버 함수를 오버로딩 하지 마라. 오버로딩 함수 탐색 규칙에서 제외된다. 자식 개체를 부모 개체에 대입하지 마라. 아무런 오류 없이 복사 손실 된다. 구현 코드가 없는 단위 전략 인터페이스인 경우에만 다중 상속하라. 소멸자에서 가이드...
기능 스펙을 정의하여 코딩 계약을 맺으려면 인터페이스로 정의하라. 기능 스펙과 어느 정도의 공통 기능을 제공하려면 추상 클래스로 정의하라.
잘못 사용하기엔 어렵게, 바르게 사용하기엔 쉽게 구현하라. 단일 책임 원칙(Single Responsibility Principle)을 준수하여 사용하기 쉽게 만들어라. 암시적 정의를 차단하여 의도한 동...
유틸리티 클래스