-
Tip : 생성자 초기화 리스트와 생성자 바디에서의 초기화 차이@ 16. 1 ~ 17. 1/C++ 2014. 4. 26. 12:27
C++에서 객체를 생성할 때는 생성자를 호출하기 전에 모든 데이터 멤버들이 먼저 생성되어 메모리에 할당된 상태여야 한다.
이때 객체타입인 데이터 멤버는 생성자가 호출되고 기본 타입들은 그 데이터가 할당된 메모리에 남아 있는 임의의 값을 가지게 된다.
생성자 초기화 리스트는 이러한 과정에서의 멤버에 대한 생성자 호출과 기본 타입 데이터의 초깃값을 선택할 수 있게 해준다.
*데이터 멤버 클래스가 디폴트 생성자를 제공하지 않는다면 반드시 생성자 초기화 리스트를 이용해서 그 멤버 클래스의 명시적인 생성자를 호출해 주어야 한다.
예를 들어
class A
{
public:A(double a);
};
있고(디폴트 생성자는 없음 명시적인 double 타입 생성자만 있다)
다음에는 이 클래스를 데이터 멤버로 가진 다른 클래스를 보자
class B
{
public:B();
A a;
};
B클래스의 생성자는 다음처럼 정의될수 있다. B::B() {}
그리고 다음처럼 이 B클래스를 선언하여 객체를 만들때 에러가 발생된다
B b;
왜냐하면 a의 객체는 디폴트 생성자가 없기 때문에 a를 어떻게 초기화할지 모르기 때문에..
그래서
B::B() : a(1.0) {} 이런식으로 B의 생성자를 초기화 리스트를 이용해서 해주면 된다.
이외에는 const 데이터 멤버, 참조 타입 데이터 멤버는 반드시 초기화 리스트를 이용해서 초기화해야한다.
'@ 16. 1 ~ 17. 1 > C++' 카테고리의 다른 글
Tip : 메모리 해제, static 메서드 (0) 2014.04.27 Tip : 반환형이 참조형인 경우 (0) 2014.04.26 열혈강의 C++(잊어버린 부분 정리 2) (1) 2014.04.07 열혈강의 C++(잊어버린 부분 정리 1) (0) 2014.04.06 typedef (0) 2014.03.06