본문 바로가기

c++12

[Effective C++] 항목 18 ~ 21 항목 18 : 인터페이스 설계는 제대로 쓰기엔 쉽게, 엉터리로 쓰기엔 어렵게 하자class Date { public: Date(int month, int day, int year); ... }; - 매개변수 전달 순서 오류 - 숫자 범위 오류 1) Wrapper Type을 구현하여, 오류를 막자struct Month{ explict Month(int m) : val(m) {} int val; }; class Date { public: Date(const Month& m, const Day& d, const Year& y); ... }; Date d(Month(1), Day(3), Year(2018)); 2) 유효한 값의 범위를 제한하자 - enum 활용 => 타입 안전성? - 유효한 값의 집합을 미리 정.. 2018. 1. 23.
[Effective C++] 항목 13 ~ 17 항목13. 자원 관리에는 객체가 그만! Class Investment {...}; // 투자를 모델링한 최상위 클래스Investment * createInvestment // Investment 클래스의 객체를 얻는 팩토리 함수 void f(){Investment *pInv = createInvestment(); //팩토리 함수 호출...delete pInv;} 위 상황에서 여러가지 경우의 수에 의해 delete 가 호출되지 않을 가능성이 존재한다. (return, continue, goto, exception등)해결 방법 : 자원을 객체에 넣고 그 자원 해제를 소멸자가 맡도록 하며, 그 소멸자는 실행 제어가 함수를 떠날 때 호출되도록 만드는 것 (스마트 포인터 사용) void f(){std:auto_p.. 2018. 1. 23.
[Effective C++] 항목 5 ~ 12 항목 5. C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자- 복사 생성자(const &...), 복사 대입 연산자(operator=), 소멸자(~)는 사용자가 선언하지 않으면 컴파일러가 기본적인 형태로 선언하게 됩니다. - 만약 class Empty{}; 라는 공백의 클래스를 선언하면 컴파일러에서는 기본적으로 아래와 같은 형태의 기본적인 구조를 만든다고 생각하시면 됩니다. class Empty{ public: Empty(){...} Empty(const Empty& rhs){...} ~Empty(){...} Empty& operator=(const Empty& rhs){...} }; - 소멸자는 이 클래스가 상속한 기본 클래스의 소멸자가 가상소멸자로 되어있지 않으면 역시 비가상 소멸자로 만.. 2018. 1. 23.
[Effective C++] 항목1 ~ 4 항목1: C++를 언어들의 연합체로 바라보는 안목은 필수 C++ 이해를 쉽게 하기 위해 단일언어들의 상관관계가 있는 연합체로 보고 각 언어 규칙을 각개격파한다.- 시각이 단순해지고 기억하기 편함.- 4가지 단일언어로 나누어 본다.( C, 객체지향 개념의 C++, 템플릿 C++, STL ) - C : 블록, 문장, 선행 처리자, 기본제공 데이터타입, 배열, 포인터- 객체지향 개념의 C++ : 클래스(생성자, 소멸자), 캡슐화, 상속, 다형성, 가상함수(동적 바인딩)- 템플릿 C++- STL : Standard template Library 효과적인 프로그래밍을 위해 한 하위 언어에서 다른 하위 언어로 옮겨가면서 대응 전략을 바꿔야 한다.ex) C에서는 값에 의한 전달이 참조에 의한 전달보다 효율적객체지향 .. 2018. 1. 23.