ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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 데이터 멤버, 참조 타입 데이터 멤버는 반드시 초기화 리스트를 이용해서 초기화해야한다.

Designed by Tistory.