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

연두비두밥·2024년 5월 9일

Effective C++

목록 보기
2/2
post-thumbnail

본 포스팅은 개인 공부를 위한 학습 내용을 정리한 것 입니다.

요약

Chapter 2

생성자, 소멸자 및 대입 연산자

항목 5: C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자

  • 사실 빈 함수는 진짜로 빈 함수가 아니다.
// 1
class Empty{};

// 2 
class Empty {
public:
	Empty() { ... }						// 기본 생성자
    Empty(const Empty& rhs) { ... }		// 복사 생성자
    ~Empty() { ... }					// 소멸자
    
    Empty& operator= (const Empty& rhs) { ... } // 복사 대입 연산자
};

사실 1번과 2번은 같은 코드다.

즉, 클래스가 비어있더라도 컴파일러가 '필요하다 판단되면' 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 저절로 선언해준다.

이들은 모두 public 멤버이며 inline 함수이다.

Empty e1;				// 기본 생성자, 소멸자
Empty e2(e1);			// 복사 생성자
e2 = e1;				// 복사 대입 연산자

각 필요하다고 판단되는 상황이다.

소멸자는 이 클래스가 상속한 기본 클래스의 소멸자가 가상 소멸자로 되어 있지 않으면 역시 비가상 소멸자로 만들어진다.(항목 7 참조)

  • 그렇다고 해서 항상 생성자가 생기지는 않는다. 내가 인자가 있는 생성자를 만들었으면 컴파일러는 인자를 받지 않는 생성자를 만들지 않는다.
profile
꾸준하고 싶은 사람

0개의 댓글