반응형 Effective C++5 Effective C++ 항목9 : 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 Effective C++ 항목9 객체 생성 및 소멸 과정 중에는 절대로 가상 함수를 호출하지 말자 객체 생성 및 소멸 과정 중에는 절.대.로 가상 함수를 호출해선 안된다!! // 기본 클래스 class Transaction { public: Transaction(); virtual void logTransaction() const = 0; // 타입에 따라 달라지는 로그 기록 ... }; // 기본 클래스 생성자 Transaction::Transaction() { logTransaction(); } // Transaction 의 파생 클래스 class BuyTransaction : public Transaction { public: // Transaction 타입에 따른 거래내역 로깅 virtual vo.. 2023. 2. 12. Effective C++ 항목7 : 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. Effective C++ 항목7 : 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자. 객체에서 메모리 등 자원의 누수를 막기 위해서는 소멸자 호출 class TimeKeeper { public: TimeKeeper(); ~TimeKeeper(); ... }; class AtomicClock: public TimeKeeper { ... }; class WaterClock: public TimeKeeper { ... }; class WristClock: public TimeKeeper { ... }; ... // 팩토리 메서드 패턴 TimeKeeper* ptk = getTimeKeeper(); ... delete ptk; 문제 발생! 기본 클래스의 소멸자가 비가상 소멸자인 경우, 그의.. 2023. 2. 5. Effective C++ 항목5 : 컴파일러가 기본으로 만드는 함수들에 촉각을 세우자 Effective C++ 항목5 컴파일러가 기본으로 만드는 함수들에 촉각을 세우자 개발자가 클래스에 기본 생성자/복사 생성자/소멸자/복사 대입 연산자를 선언하지 않으면? 컴파일러가 필요하다고 판단하여 이 함수들을 알아서 기본형으로 만듦 소멸자의 경우, 기본 클래스의 소멸자가 가상이 아니면 동일하게 비가상 소멸자로 만듦 복사 생성자/복사 대입 연산자의 경우, 복사하는 변수들이 컴파일러가 아는 기본형이라면 자동 생성 컴파일러가 모르는 자료형이라면, legal하지 않다면, resonable하지 않다면 생성하지 않음 ex) 복사 대상이 참조자, 상수이라면 자동 생성 실패 (컴파일 거부) 2023. 1. 26. Effective C++ 항목4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자 Effective C++ 항목4 : 객체를 사용하기 전에 반드시 그 객체를 초기화하자 클래스의 멤버 변수를 초기화할 때 생성자 등 함수의 구현 부에서 값을 대입하면? => 기본 생성자 호출 후, 복사 대입 생성자가 호출되어 런타임 시간이 더 걸린다. (비효율적!) 멤버 초기화 리스트(이니셜라이저)를 사용하면? => 초기화와 동시에 값 복사된다. => 복사 생성자만 호출되므로 보다 효율적! 상수와 참조자로 되어있는 멤버 변수는 반드시 초기화 되어야함 갖가지 경우를 모두 기억하기 보다는 멤버 초기화 리스트를 사용하는 것이 안전! 멤버 초기화 리스트 순서는 멤버 변수 선언 순서와 동일하게 가야 유지보수 편리 객체를 구성하는 데이터 초기화 순서는? 기본 클래스는 파생 클래스보다 먼저 초기화 클래스 데이터 멤버는.. 2023. 1. 25. 이전 1 2 다음 반응형