카테고리 없음

[Effective C++] Item5_C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자

해달 2018. 1. 25. 22:43

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

챕터 핵심 내용

  • 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.

- 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.

  • 기본 생성자는 생성자 함수가 아무것도 없을 시 자동으로 생성된다.
  • 복사 생성자, 복사 대입 연산자가 정의되어 있지 않은 상태에서 대입이나 복사를 시도한다면, 컴파일러에 의해 자동으로 생성된다.
  • 소멸자를 정의하지 않을 시 자동으로 생성된다.
  • 컴파일러에 의해 만들어진 합성 함수는 모두 기본형이고, public에 inline이다.

후기(postscript)

C++11부터는 이동 의미론(move semantic)이 추가되어, 여기에 이동 생성자 및 이동 대입 연산자도 만들어질 수 있다. 이동 생성자 및 이동 대입 연산자가 합성되는 조건은 다음과 같다.

  1. 복사 생성자 존재X
  2. 복사 대입 연산자 존재X
  3. 이동 대입 연산자(이동 생성자)존재X
  4. 소멸자 존재X
  5. 암시적으로 삭제로 여겨지는 경우 제외(C++14까지).

이동 의미론쪽은 거의 자동으로 생성이 안된다고 봐도 무방하지 않나 싶다. 암시적으로 삭제로 여겨지는 경우는 기입하지 않는다.