Item4_객체를 사용하기 전에 반드시 그 객체를 초기화하자
챕터 핵심 내용
- 기본제공 타입의 객체는 직접 손으로 초기화 하자. 경우에 따라 저절로 되기도 하고 안되기도 하기 때문이다.
- 생성자에서는, 멤버 초기화 리스트를 사용하자. 그리고 초기화 리스트에 멤버를 나열할 때는 클래스에 각 데이터 멤버가 선언된 순서와 똑같이 나열하자.
- 여러 번역 단위에 있는 비지역 정적 객체들의 초기화 순서 문제는 피해서 설계하자. 비지역 정적 객체를 지역 정적 객체로 바꾸면 된다.
- 기본제공 타입의 객체는 직접 손으로 초기화 하자. 경우에 따라 저절로 되기도 하고 안되기도 하기 때문이다
- 초기화되지 않은 값을 읽으면 미정의 동작이 일어난다.
- 모든 객체를 사용하기 전에 항상 초기화하자.
- 생성자에서는, 멤버 초기화 리스트를 사용하자. 그리고 초기화 리스트에 멤버를 나열할 때는 클래스에 각 데이터 멤버가 선언된 순서와 똑같이 나열하자
- 생성자에서는 객체의 모든 것을 초기화하자.
- 대입(assignment)과 초기화(initialization)을 혼돈하면 안된다.
- C++ 규칙에는 어떤 객체이든 그 객체의 데이터 멤버는 생성자의 본문이 실행되기 전에 초기화되어야 한다고 명시되어 있다.
- 멤버 초기화 리스트를 쓰는 습관을 들이면 혹시나 어떤 멤버가 초기화 되지 않았다는 부담을 질 필요가 없다.
- 멤버가 선언된 순서대로 리스트에 적어주자. 클래스 데이터 멤버는 그들이 선언된 순서대로 초기화되기 때문이다.
- 여러 번역 단위에 있는 비지역 정적 객체들의 초기화 순서 문제는 피해서 설계하자. 비지역 정적 객체를 지역 정적 객체로 바꾸면 된다
- 정적 객체(static object) : 자신이 생성된 시점부터 프로그램이 끝날 때까지 살아 있는 객체
- 전역 객체
- 네임스페이스 유효범위에서 정의된 객체
- 클래스에서 static으로 선언된 객체
- 함수 안에서 static으로 선언된 객체(지역)
- 파일 유효범위에서 static으로 정의된 객체
- 번역 단위(translation unit) : 컴파일을 통해 하나의 목적 파일을 만드는 바탕이 되는 소스 코드. 기본적으로는 소스 파일 하나. 포함되는 파일들까지 합쳐서 하나의 번역 단위가 됨.
- 별개의 번역 단위에서 정의된 비지역 정적 객체들의 초기화 순서는 정해져 있지 않다.
- 싱글톤 패턴을 이용하자.