2013-02-13 2 views
3

위임 된 생성자를 사용하여 생성자 초기화 목록을 만들 때 목록 실행 순서는 무엇입니까?위임 된 생성자를 사용하여 생성자 초기화 목록 실행 순서

여기에는 두 개의 상반되는 표준 규칙이 있습니다 :
1.) 생성자 초기화 목록은 목록 순서가 아닌 항목의 선언 순서에 따라 실행됩니다.
2) 생성자 초기화 목록의 위임 된 생성자는 항상 "생성자 생성자"가 실행되기 전에 호출됩니다.

어떤 규칙이 우수합니까? (생성자가 클래스 항목이기 때문에) 이것이 중요한 이유 : 위임 된 생성자가 "mother 생성자"에 의해 이미 초기화 된 항목을 다시 삽입하거나 그 반대의 경우도 마찬가지입니다.

답변

2

§12.6.2/6 말한다

MEM-초기화-ID 생성자의 클래스, 를 지정하는 경우는 ... 유일한 MEM-초기화한다 대상 생성자가 반환되면 위임 생성자의 본문이 실행됩니다.

생성자를 위임하기 전에 아무 것도 초기화 할 수 없으므로 충돌이 없습니다. 생성자를 위임하면 해당 생성자가 호출되고 대상 생성자의 초기화 프로그램 목록이 실행되고 대상 생성자가 실행 된 다음 주 생성자가 실행됩니다.

+0

감사합니다. 그러나 솔직히 말해서 귀하의 성명서가 인용 된 텍스트에서 어떻게 나오는지 이해하지 못합니다. 올바른 것이고 올바르게 이해하면 다음과 같습니다. 1) 위임 된 생성자 목록을 실행합니다. 2) 위임 된 생성자 본문을 실행합니다. 3) 주 생성자 목록을 실행합니다. 4) 주 생성자 본문을 실행합니다. –

+1

@BM 아니요, 그것은 단지 1) exec 위임 된 생성자 목록 2) exec 위임 된 생성자 본문 3) exec 주요 생성자 본문입니다. 주 생성자는 생성자를 위임하는 것 이외의 다른 초기화 연산자 목록을 가질 수 없습니다. –

+0

* narf * 지금 얻었습니다 - 목록을 통해 재구성 기능을 사용하고 싶었지만 위험한 것으로 생각됩니다. 고마워! –