본문 바로가기
책 정리/Effective C++ 3rd

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

by ocean20 2019. 10. 23.

클래스가 비어있지만 비어있지 않을때는 언제일까?
답은 빈클래스를 컴파일러가 훑고지나갈때이다.

이때 컴파일러는 "암시적"으로 생성자, 복사생성자, 복사대입연산자, 소멸자를 생성한다.(기본타입형으로, public멤버이며 inline함수이다.)

따라서, 개발자는 컴파일러가 암시적으로 만들어내는 함수에 촉각을 세워야한다.

중간정리 : 암시적 함수의 생성을 막기위해, 개발자는 해당함수를 미리 명시한다.

Q. 복사대입연산자가 암시적으로 만들어지지 않는경우는?

답을확인하기전에,하나만 짚어보자.

컴파일러는 암시적자동생성을위해 두가지 조건을따진다.
최종결과코드가 1. legal한지, 2. reasonable한지.

A. 참조자(reference)와 상수타입이 있을때 사용자는 고민해야한다.
만약 멤버 변수에 참조자와 상수타입이있을때 대입이 불가능해진다.
왜? 참조자는 객체를한번 지정하면 바꿀수없다. 상수도 처음초기화한 값을 수정할수없기때문.

댓글