이펙티브 C++(99p ~ 111p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 99p ~ 111p 요약 항목 9: 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 객체 생성 및 소멸 과정 중에는 가상 함수를 호출하면 절대로 안 된다. 해당 과정에서 호출한 가상 함수는 우리가 원하는 대로 돌아가지 않을 것이다. 주식 거래를 위해 다음과 같은 클래스를 정의했다고 가정하자. // 주식 거래에 대한 기본 클래스 // 주식 거래 모델링에 있어 중요한 기능은 감사(audit) 기능 // 따라서 주식 거래 객체가 생성될 때마다 감사 로그를 기록하기 위한 기능이 필요 class Transaction { public: Transaction(); // 주식 거래 타입에 따라 달라..

    이펙티브 C++(89p ~ 99p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 89p ~ 99p 89p ~ 99p 요약 항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 // 시간 기록을 유지하는 방법을 정의하는 기본 클래스 class TimeKeeper { public: TimeKeeper(); ~TimeKeeper(); }; // 파생 클래스 class AtomicClock : public TimeKeeper {}; class WaterClock : public TimeKeeper {}; class WristWatch : public TimeKeeper {}; 위와 같이 시간 기록을 유지하는 방법을 정의하고 있는 베이스 클래스인 TimeKeep..

    이펙티브 C++(80p ~ 89p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 80p ~ 89p 요약 2. 생성자, 소멸자 및 대입 연산자 거의 모든 C++ 클래스에 한 개 이상 꼭 들어 있는 것들이 생성자, 소멸자, 대입 연산자이다. 생성자는 새로운 객체를 메모리에 만드는 데 필요한 과정을 제어하고 객체의 초기화를 담당한다. 소멸자는 객체를 없앰과 동시에 그 객체가 메모리에서 적절히 사라질 수 있도록 하는 과정을 제어한다. 대입 연산자는 기존의 객체에 다른 객체의 값을 줄 때 사용한다. 항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 클래스가 비어 있지만(empty) 비어 있는게 아닌 때가 언제일까? 일단은 C++ 컴파일러가 빈 클래스를 훑고 지나갈 때..

    이펙티브 C++(71p ~ 79p)

    이펙티브 C++ https://www.yes24.com/Product/Goods/17525589 페이지 71p ~ 79p 요약 항목 4: 객체를 사용하기 전에 반드시 그 객체를 초기화하자 C++에서 초기화되지 않은 값을 읽도록 내버려 두면 정의되지 않은 동작이 발생한다. C++의 객체(변수) 초기화 규칙이 분명히 준비되어 있지만, 규칙 자체가 복잡하다. 일반적인 사항을 정리하면 다음과 같다. C++의 C 부분만을 사용하며 초기화에 런타임 비용이 소모될 수 있는 상황이라면 값이 초기화된다는 보장이 없다. 그러나 C 부분이 아닌 다른 부분을 사용하면 상황이 달라지는 경우가 있다. 배열을 사용하면(C++의 C 부분) 원소가 확실히 초기화된다는 보장이 없지만, vector(C++의 STL 부분)을 사용하면 이를..