'이니셜라이저'에 해당되는 글 2건

  1. 2012.09.20 이니셜라이저의 성능 향상에 대하여
  2. 2012.05.19 이니셜라이저(Initializer)



※ 이니셜라이저를 이용하면 선언과 동시에 초기화가 이뤄지는 형태로 바이너리 코드가 생성된다.


즉, 34~35행은 AAA mem = ref; 로 해석이 된다.

그러므로 복사 생성자만 호출이 된다.


하지만 45~48행은 생성자와 대입연산자 이 두개가 호출이 된다. 

즉, AAA mem;

     mem = ref; 이렇게 해석이되므로 인해.. 생성자 호출이 되어지고 그다음 대입연산자가 호출이 된다. 


※ 생성자의 몸체부분에서 대입연산을 통한 초기화를 진행하면, 선언과 초기화를 각각 별도의 문장에서 진행하는 형태로 바이너리 코드가 생성된다.



위의 예제에서 보이듯이 이니셜라이저를 이용해서 초기화를 진행하면, 함수의 호출횟수를 줄일 수 있어서, 그리고 초기화의 과정을 단순화시킬 수 있어서 약간의 성능향상을 기대할 수 있다.


Posted by scii
:


멤버 이니셜라이저(Member Initializer) 를 이용한 멤버 초기화



11라인에서 이니셜라이저가 쓰였는데 이것은 이렇게 된다. int num1 = n1;


또 다른 멤버 이니셜라이저를 이용한 멤버 초기화


class Rectangle

{

private:

Point upLeft;

Point lowRight;


public:

Rectangle(const int &x1, const int &y1, const int &x2, const int &y2)

:upLeft(x1, y1), lowRight(x2, y2) //이니셜라이저

{

                //empty

}

};

/* 여기서 Rectangle 클래스는 두 점의 정보를 직접 전달받을 수 있게 정의되어있다. 그리고 "이니셜라이저"를 통해 이 정보를 멤버인 Point 객체를 초기화하고있다. */


멤버 이니셜라이저가 의미하는 바

1. 객체 upLeft의 생성과정에서 x1과 y1을 인자로 전달받는 생성자를 호출하라.

2. 객체 lowRight의 생성과정에서 x2와 y2를 인자로 전달받는 생성자를 호출하라.


이렇듯 멤버 이니셜라이저는 멤버변수로 선언된 객체의 생성자 호출에 활용된다.


따라서, 프로그래머는 생성자의 몸체에서 초기화 하는 방법과 이니셜라이저를 이용하는 초기화 방법 중에서 선택이 가능하다.

그러나 일반적으로 멤버변수의 초기화에 있어서는 이니셜라이저를 선호하는 편이다.

여기에는 다음 두 가지 이점이 있기 때문이다.


1. 초기화의 대상을 명확히 인식할 수 있다.

2. 성능에 약간의 이점이 있다.




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

private 생성자  (0) 2012.05.20
디폴트 생성자(Default Constructor)  (0) 2012.05.20
생성자(Constructor)  (0) 2012.05.12
캡슐화  (0) 2012.05.12
const 함수  (2) 2012.05.08
Posted by scii
: