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
가 생성된다.kitty
에cat(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