lifetime contract

생성자는 유효 상태를 만들고, 소멸자는 수명 끝의 책임을 닫는다

생성자와 소멸자는 호출자가 직접 순서를 관리하는 일반 함수가 아니라, 객체가 태어나고 사라지는 경계에서 자동으로 실행되는 수명 계약이다.
생성자 멤버를 초기화하고 불변식을 세운다.
객체 생성자가 끝난 뒤 public 함수가 기대하는 상태가 된다.
소멸자 소유한 자원을 정리하고 외부 흔적을 줄인다.

객체 하나가 지나가는 다섯 구간

Book book("title", "author", 1943)
1 저장 공간 준비 스택, 전역 영역, 힙 중 어디에 객체가 놓일지 결정된다.
2 생성자 선택 인자 목록에 맞는 기본 생성자나 매개변수 생성자가 고른다.
3 멤버 초기화 초기화 리스트와 생성자 본문을 거쳐 유효한 객체가 된다.
4 사용 구간 멤버 함수는 생성자가 보장한 상태를 전제로 동작한다.
5 소멸자 정리 파일, 메모리, 핸들처럼 객체가 소유한 자원을 반환한다.
storage constructor invariant member calls destructor

수명 함수는 “언제 자동 호출되는가”로 구분한다

구분 호출 시점 주된 책임 설계 질문
기본 생성자 인자 없이 객체를 만들 때 가장 안전한 기본 상태를 만든다. 빈 객체도 유효한가?
매개변수 생성자 객체 생성 입력을 받을 때 입력으로 의미 있는 시작 상태를 만든다. 잘못된 입력은 어디서 막는가?
소멸자 스코프 종료 또는 delete 시점 생성 후 획득한 자원을 정리한다. 객체가 직접 소유한 자원이 있는가?