생성자는 객체가 생기자마자 불변식을 세운다. 소멸자는 그 객체가 수명을 다할 때 자원을 놓는다. 둘 다 클래스 이름과 연결되고, 소멸자 앞에는 `~`가 붙는다.
초기화 목록
class Ai {
public:
explicit Ai(int depth) : depth_{depth} {}
int depth() const { return depth_; }
private:
int depth_;
};멤버는 선언 순서로 초기화된다. 초기화 목록의 순서가 아니다. 한 멤버가 다른 멤버의 값에 기대면 선언 순서를 그 의존과 맞춘다. `explicit`은 `Ai a = 3;`처럼 의도하지 않은 변환 생성을 막는다.
수명이 끝나는 순서
지역 객체는 블록을 벗어날 때 생성된 반대 순서로 소멸한다. 멤버는 선언의 반대 순서로 소멸한다. 베이스 소멸자는 파생 소멸자 다음에 돈다.
자원을 직접 가진 소멸자를 쓰기 시작하면 복사와 이동도 함께 정의해야 하는 경우가 생긴다. 그 규칙은 16편에서 다룬다. 자원이 없으면 컴파일러가 만드는 특별 멤버로 충분하다.
댓글
0개아직 댓글이 없습니다.