항목4 - 객체를 사용하기 전에 반드시 그 객체를 초기화하자.

객체를 사용하기 전에 반드시 그 객체를 초기화하자.

 

1. 모든 객체를 사용하기 전에 항상 초기화를 하는 게 좋다.( int, pointer 등)

2. 대입과 초기화를 헷갈리지 말자.

3. 생성자를 좀더 세련되게 쓰기 위해선 대입문 대신에 초기화리스트를 사용하자.

4. 상수이거나 참조자는 대입이 불가능하기때문에 초기화리스트로 반드시 초기화해주자.

5. 생성자마다 초기화리스트 달린 것이 보기좋지않다면 함수로 빼내어 모든 생성자가 해당 함수를 호출하게 해주자.

6. 객체를 구성하는 데이터의 초기화 순서

- 기본 클래스는 파생클래스보다 먼저 초기화

- 클래스 데이터 멤버는 그들이 선언된 순서대로 초기화

  (멤버초기화리스트에 넣어진 순서가 달라도 순서는 그대로. 그래도 순서대로 넣어주자.)

 

7. 정적 객체(static object) : 프로그램이 끝날때까지 살아 있는 객체

 

정적 객체의 범위

- 우선 전역 객체가 있고

- 네임스페이스 유효범위에서 정의된 객체

- 클래스 안에 static으로 정의된 객체

- 함수 안에서 static으로 선언된 객체

- 파일 유효범위 안에서 static으로 정의된 객체

- 함수 안에 있는 정적 객체는 지역 정적 객체(local static object)

- 이외 정적 객체는 비지역 정적 객체(non-local static object)

 

8. 별개의 번역단위에서 정의된 비지역 객체들의 초기화 순서는 '정해져 있지 않다'.

 

-> ?) 초기화 자체가 보장이 안되는 것인가, 초기화 순서가 보장이 안되는 것인가?

 

해결방법 - 비지역 정적객체 전용함수를 만들고 함수내에 해당객체를 지역 정적객체로 선언하여 해당 레퍼런스를 반환.

 

 

잊지말자!

기본타입객체는 직접 초기화해라.

초기화 리스트를 사용해라.

여러 번역단위에 있는 비지역 정적객체들의 호출 순서문제를 피하여 설계해라.

댓글을 작성해보세요.