본문으로 바로가기

OOP의 이해 - ④ Member Init list

category Computer Science/C++ 2021. 10. 12. 17:49

Member Init list

초기화 리스트(Member Init list)를 이해하기 위해서 아래의 코드를 살펴보자. zoo 클래스에서 아래와 같이 멤버 변수에 있는 객체를 생성할 경우 cat 생성자가 두 번 실행된다.

class cat {
public:
    cat(){}
    cat(int age) : mAge(age){}
private:
    int mAge;
};
class zoo {
public:
    zoo(int age) {
        kitty = cat(age);
    }
private:
    cat kitty;
};
int main()
{
    zoo(1);

    return 0;
}
  • zoo 가 생성될 때 멤버 변수 kitty가 생성된다.
  • kittycat(age)를 대입할때 임시 객체가 생성된다.
  • 임시 객체의 값이 kitty에 대입되고 임시 객체가 소멸되다.

cat 객체 kitty를 하나 생성하기 위해서 생성자가 두 번 호출된 것이다. 이 문제를 초기화 리스트 (Member Init list)로 해결할 수 있다. 초기화 리스트를 사용하면 zoo 오브젝트를 만들 때 cat(int age) 생성자를 사용하여 kitty를 생성하기 때문에 한 번의 생성자 호출로 kitty를 만들 수 있다.

class cat {
public:
    cat(){}
    cat(int age) : mAge(age){}
private:
    int mAge;
};
class zoo {
public:
    zoo(int age) : kitty(cat(age)) {}
private:
    cat kitty;
};
int main()
{
    zoo(1);

    return 0;
}

 


출처: https://www.youtube.com/channel/UCHcG02L6TSS-StkSbqVy6Fg