클래스를 초기화하는 방법은 다음의 세 개가 있다.


1. 초기화 리스트

생성자의 초기화 리스트에서 다른 생성자를 부르는 것을 위임 생성자라고 하며, 이는 C++11부터 사용 가능하다.

그 이전에는 생성자 내에서 다른 생성자를 부를 수 없다.


2. 대입


3. 필드 초기화 (C++11부터 가능)



이중 초기화 리스트와 대입은 차이가 있는데, 

초기화 리스트는 마치 일반 변수에서 선언과 동시에 값을 입력하는 것과 같고

대입은 선언 후에 대입하는 것이다.


따라서 reference나 const는 선언과 동시에 값이 있어야 하기에 초기화 리스트로만 초기화 할 수 있다.

그리고 int, double 등이 아니라 class에 대입을 썼다면, 선언 시 디폴트 생성자가 불리고 그만큼 오버헤드가 존재한다.


따라서 대입 보다는 초기화 리스트를 사용하는 것이 권장된다.



* 초기화하지 않은 경우


초기화하지 않은 멤버 변수의 경우,

클래스라면 디폴트 생성자가 불린다.

Primitive type이라면 (int 등) 초기화되지 않는다.

Reference라면 컴파일 오류가 발생한다.



이 경우 x, y는 임의의 값이 나오게 된다.


참고: https://stackoverflow.com/questions/3127454/how-do-c-class-members-get-initialized-if-i-dont-do-it-explicitly

+ Recent posts