항목 13. 클래스에 선언된 순서에 따라 멤버 초기화 리스트에 멤버들을 나열한다.
MSVC 2005에선 초기화 리스트 순서와 상관이 없었음, 3판에서도 내용이 없는것으로 보아, C++ 표준에서 처리되어 없어진것으로 생각됨 2008/05/31 12:57 수정
이유
1. 엄연히 멤버 객체 초기화 순서가 있어, 초기화되지 않은 객체 초기화시 신비롭게 동작하기 때문이다.
주의점
1.멤버 초기화 리스트는 클래스 멤버 객체 선언 순으로 나열하여 초기화 하는것이 좋다.
이해해야 할 부분
1. 멤버 객체의 생성은 클래스 객체가 생성 될때 만들어 지고, 아래의 사항으로 넘어 간다.
멤버 객체의 생성 순서
1. 모든 멤버 객체의 메모리 공간 할당
2. 모든 멤버 객체의 메모리 공간에 이름 부여
3. 각 멤버가 초기화 될 건덕지가 있다면, 그 값으로 초기화
멤버 객체의 초기화 순서는 바로 이 3번부터 클래스 멤버 객체 선언 순으로 초기화를 진행한다.
그렇기 때문에
이름만 부여한 상태의 변수를 이용하여
다른 멤버 객체(이름만 부여한 상태의 변수보다 먼저 선언된 멤버 객체)를 초기화 하려 할때,
신비스로운 값으로 초기화가 된다는 점을 말하는것이다.
증명 소스코드 2008/05/31 12:57 수정
MSVC 2005에선 초기화 리스트 순서와 상관이 없었음, 3판에서도 내용이 없는것으로 보아, C++ 표준에서 처리되어 없어진것으로 생각됨 2008/05/31 12:57 수정
이유
1. 엄연히 멤버 객체 초기화 순서가 있어, 초기화되지 않은 객체 초기화시 신비롭게 동작하기 때문이다.
주의점
1.멤버 초기화 리스트는 클래스 멤버 객체 선언 순으로 나열하여 초기화 하는것이 좋다.
이해해야 할 부분
1. 멤버 객체의 생성은 클래스 객체가 생성 될때 만들어 지고, 아래의 사항으로 넘어 간다.
멤버 객체의 생성 순서
1. 모든 멤버 객체의 메모리 공간 할당
2. 모든 멤버 객체의 메모리 공간에 이름 부여
3. 각 멤버가 초기화 될 건덕지가 있다면, 그 값으로 초기화
멤버 객체의 초기화 순서는 바로 이 3번부터 클래스 멤버 객체 선언 순으로 초기화를 진행한다.
그렇기 때문에
이름만 부여한 상태의 변수를 이용하여
다른 멤버 객체(이름만 부여한 상태의 변수보다 먼저 선언된 멤버 객체)를 초기화 하려 할때,
신비스로운 값으로 초기화가 된다는 점을 말하는것이다.
증명 소스코드 2008/05/31 12:57 수정
'책 정리 > Effective C++ 2판' 카테고리의 다른 글
3부, 클래스와 함수 : 설계 및 선언 (0) | 2008.05.08 |
---|---|
항목 17. operator=에서 재귀치환을 검사한다. (0) | 2008.05.08 |
항목 16. operator=에서 모든 데이터 멤버들로의 치환을 수행한다. (0) | 2008.05.08 |
항목 15. operator= 이 *this에 대한 레퍼런스(reference)를 리턴(return)하도록 한다. (0) | 2008.05.08 |
항목 14. 베이스 클래스에서 소멸자는 가상 함수로 선언해야 한다. (0) | 2008.05.08 |
항목 12. 생성자에서 치환보다는 초기화를 사용한다. (0) | 2008.05.07 |
항목 11. 동적으로 할당되는 메모리를 갖는 클래스를 위해서는 복사 생성자와 치환 연산자를 선언하라 (0) | 2008.05.07 |
2부까지 종료 (0) | 2008.05.07 |
항목 10. operator new를 작성한다면 operator delete도 작성한다. (0) | 2008.05.07 |
항목 9. new의 "정상"형식을 감추지 않는다. (0) | 2008.05.07 |
최근댓글