아래의 코드를 실행해보자.
class Test {
public:
Test() {
cout << "Test Constructor" << endl;
}
};
class Toy {
public:
Toy() {
cout << "Toy Constructor" << endl;
}
private:
Test t;
};
int main() {
Toy t;
}
출력 결과는 아래와 같다.
Toy의 생성자를 호출하기 전에 Toy의 멤버에 먼저 접근해서 멤버의 생성자를 호출한다. 따라서 ‘Test Constructor’가 먼저 출력된다.
vector, list와 같은 container를 멤버 변수로 둘 때에 이러한 멤버 변수들도 생성자가 있으니, 사용자가 의도하는 게 아니라면 따로 생성자를 호출하도록 구현하지 않아도 이미 생성자 호출을 완료한 상태로 부모 class의 생성자 구현 코드에 진입한다. 이건 아마 default 생성자를 호출하는 것일 것 같다.