Effective C++ 2

[Effective C++] Chapter 2. 생성자, 소멸자 및 대입 연산자(2)

항목 7: 다형성을 가진 기본 클래스에서는 소멸자를 반드시 가상 소멸자로 선언하자 기본 클래스에 virtual 소멸자가 없다면, 파생 클래스의 소멸자 실행이 건너뛰어져 발생하는 메모리릭을 방지하도록 해야함 가상 함수를 하나라도 가진 클래스 (=기본 클래스로 사용하겠다) --> 클래스의 소멸자도 가상 소멸자여야 함 자연스럽게 소멸자가 가상 소멸자로 되어 있으면 기본 클래스구나 하고 인식할 수 있음 추상 클래스(=기본 클래스로 쓰일 목적)로 만들고 싶은 클래스 --> 순수 가상 소멸자를 선언하자(=순수 가상함수 있으면 추상 클래스) class Base { public: Base(); virtual ~Base(); } clase Object : public Base { public: Object(); ~Obj..

Programming/C++ 2022.06.12

[Effective C++] Chapter 2. 생성자, 소멸자 및 대입 연산자(1)

항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자 빈 클래스라도 컴파일러가 자동으로 생성해주는 멤버함수 복사생성자 외 생성자 선언 안했을 경우 기본 생성자 따로 정의하지 않은 경우 복사 생성자 복사 대입 연산자 복사는 데이터 사본을 그대로 복사함 (얕은 복사) 소멸자 ==> 컴파일러가 자동 생성하는 함수가 있음을 인지하고 직접 선언하여 명확히 처리하자 class CClass { private: char* name; public: //기본 생성자 CClass() {} //복사 생성자 (동적할당 얕은 복사 주의) CClass(const CClass &class) {} //복사 대입 연산자 (동적할당 얕은 복사 주의) CClass& operator=(const Class &class) ..

Programming/C++ 2022.06.12