Item5_C++가 은근슬쩍 만들어 호출해 버리는 함수들에 촉각을 세우자
챕터 핵심 내용
- 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.
- 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.
- 컴파일러는 경우에 따라 클래스에 대해 기본 생성자, 복사 생성자, 복사 대입 연산자, 소멸자를 암시적으로 만들어 놓을 수 있다.
- 기본 생성자는 생성자 함수가 아무것도 없을 시 자동으로 생성된다.
- 복사 생성자, 복사 대입 연산자가 정의되어 있지 않은 상태에서 대입이나 복사를 시도한다면, 컴파일러에 의해 자동으로 생성된다.
- 소멸자를 정의하지 않을 시 자동으로 생성된다.
- 컴파일러에 의해 만들어진 합성 함수는 모두 기본형이고, public에 inline이다.
- 기본 생성자는 생성자 함수가 아무것도 없을 시 자동으로 생성된다.
- 복사 생성자, 복사 대입 연산자가 정의되어 있지 않은 상태에서 대입이나 복사를 시도한다면, 컴파일러에 의해 자동으로 생성된다.
- 소멸자를 정의하지 않을 시 자동으로 생성된다.
- 컴파일러에 의해 만들어진 합성 함수는 모두 기본형이고, public에 inline이다.
후기(postscript)
C++11부터는 이동 의미론(move semantic)이 추가되어, 여기에 이동 생성자 및 이동 대입 연산자도 만들어질 수 있다. 이동 생성자 및 이동 대입 연산자가 합성되는 조건은 다음과 같다.
- 복사 생성자 존재X
- 복사 대입 연산자 존재X
- 이동 대입 연산자(이동 생성자)존재X
- 소멸자 존재X
- 암시적으로 삭제로 여겨지는 경우 제외(C++14까지).
이동 의미론쪽은 거의 자동으로 생성이 안된다고 봐도 무방하지 않나 싶다. 암시적으로 삭제로 여겨지는 경우는 기입하지 않는다.
C++11부터는 이동 의미론(move semantic)이 추가되어, 여기에 이동 생성자 및 이동 대입 연산자도 만들어질 수 있다. 이동 생성자 및 이동 대입 연산자가 합성되는 조건은 다음과 같다.
- 복사 생성자 존재X
- 복사 대입 연산자 존재X
- 이동 대입 연산자(이동 생성자)존재X
- 소멸자 존재X
- 암시적으로 삭제로 여겨지는 경우 제외(C++14까지).
이동 의미론쪽은 거의 자동으로 생성이 안된다고 봐도 무방하지 않나 싶다. 암시적으로 삭제로 여겨지는 경우는 기입하지 않는다.