본문 바로가기

Windows Developer/C++

[C++] 초기화 리스트(Initialize List)

[출처] café.naver.com/cppmaster

1. 초기화 리스트란?

클래스의 각 멤버를 생성자에서 초기화 할 때 생성자 뒤에 콜론연산자(:)를 사용해서 객체의 멤버를 초기화 할 수 있다. 이를 초기화 리스트, 또는 콜론 초기화라고 한다.

 - 초기화 리스트를 사용하지 않은 경우

class Point
{
      int x;
      int y;
public:
      Point(int a, int b)
      {
            x = a;
            y = b;
      }
};

 - 초기화 리스트를 사용한 경우

class Point
{
      int x;
      int y;
public:
      Point(int a, int b) : x(a), y(b)
      {
      }
};

그럼 , 이와 같은 초기화 리스트를 사용하는 이유는 무엇일까? 초기화 리스트를 사용하는 이유는 크게 효율성필요성으로 나누어 볼 수 있다.



2. 초기화 리스트의 효율성, 장점

임의의 클래스가 멤버로 다른 객체를 가진다면 초기화 리스트를 사용하지 않은 것보다는 초기화 리스트를 사용한 초기화 방법이 좋다.
그 이유는 위 코드에서 초기화 리스트를 사용하지 않은 방법은 x,y의 메모리 공간이 먼저 만들어 지고 만들어진 메모리에 대입되는 것이지만, 오른쪽 코드처럼 초기화 리스트를 사용한 경우는 x.y의 메모리가 만들어 지면서 초기화 되는 것이다.

즉, 2가지 방법의 차이는 다음과 같다
먼저 초기화 리스트를 사용하지 않고 초기화 하는 방법은, 초기화보다는 대입이다.

Object x; //Object x가 메모에 만들어지고(이순간 디폴트 생성자 호출)
x = a;     //만들어진 메모리에 값이 대입된다.(이순간 대입연산자 호출)
즉, 두번의 함수가 호출된다.

하지만 초기화 리스트를 사용한 방법은 변수(객체)가 메모리에 만들어지면서 초기화된다.
Object x = a; //변수가 메모리에 만들어 지면서 초기화 된다.(생성자가 1번 호출된다)
즉, 생성자 한번만 호출된다.

결국
초기화 하려는 멤버가 객체라면 초기화 리스트를 하용한 방법이 좀 더 효율적이다.

'Windows Developer > C++' 카테고리의 다른 글

[C++]STL에 대해서(보충)  (0) 2010.08.01
[C++] 형변환 연산자  (0) 2010.07.26
[C++] 가상함수  (0) 2010.07.26
[C++]템플릿(template)  (0) 2010.07.20
[C++]STL 표준 C++ 라이브러리  (0) 2010.07.20