클래스가 비어있지만 비어있지 않을때는 언제일까?
답은 빈클래스를 컴파일러가 훑고지나갈때이다.
이때 컴파일러는 "암시적"으로 생성자, 복사생성자, 복사대입연산자, 소멸자를 생성한다.(기본타입형으로, public멤버이며 inline함수이다.)
따라서, 개발자는 컴파일러가 암시적으로 만들어내는 함수에 촉각을 세워야한다.
중간정리 : 암시적 함수의 생성을 막기위해, 개발자는 해당함수를 미리 명시한다.
Q. 복사대입연산자가 암시적으로 만들어지지 않는경우는?
답을확인하기전에,하나만 짚어보자.
컴파일러는 암시적자동생성을위해 두가지 조건을따진다.
최종결과코드가 1. legal한지, 2. reasonable한지.
A. 참조자(reference)와 상수타입이 있을때 사용자는 고민해야한다.
만약 멤버 변수에 참조자와 상수타입이있을때 대입이 불가능해진다.
왜? 참조자는 객체를한번 지정하면 바꿀수없다. 상수도 처음초기화한 값을 수정할수없기때문.
'책 정리 > Effective C++ 3rd' 카테고리의 다른 글
항목 4. 객체를 사용하기 전에 반드시 그 객체를 초기화하자 (0) | 2019.12.15 |
---|---|
항목 3. 낌새만 보이면 const를 들이대 보자! (0) | 2019.12.10 |
항목 2. #define을 쓰려거든 const, enum, inline을 떠올리자 (0) | 2019.12.04 |
항목 6. 컴파일러가 만들어낸 함수가 필요 없으면 확실히 이들의 사용을 금해버리자 (0) | 2019.10.23 |
항목 7. 다형성을 가진 기본클래스에서는 소멸자를 반드시 가상소멸자로 선언하자 (0) | 2019.10.22 |
댓글