2012-06-26 3 views
0

개체 관리를 단순화하기 위해 개체 초기화에 대한 초기화 프로그램 목록을 사용하고 싶지만 개체가 서로 참조한다는 점이 문제입니다.내부 참조가있는 초기화 목록

//B::B(A &a) //The only available constructor for B 

class AB 
{ 
    A m_a; 
    B m_b; 

    AB() 
     : m_a() 
     , m_b(m_a) 

    ... 
}; 

표준으로 허용됩니까? 내가 이해하는 바에 따르면 클래스 내의 멤버 선언이 A, B, 초기화 목록의 순서는 클래스 내에서 물리적 순서에 의해 초기화되므로 중요하지 않습니다.

+0

복사 생성자 및 복사 할당 연산자에도주의하십시오. –

+0

IIRC, 개체에 포인터 또는 참조가 있으면 생성되지 않습니다? – Coder

+3

@ 코더 : 틀 렸습니다. –

답변

2

표준으로 허용됩니까? 내가 이해하는 바에 따르면 클래스 내의 멤버 선언이 A, B, 초기화 목록의 순서는 클래스 내에서 물리적 순서에 의해 초기화되므로 중요하지 않습니다.

예, 초기화 순서는 클래스의 멤버 속성 선언 순서입니다. 또한 생성자에 따라 B이 무엇인지에 따라 참조 또는 포인터가 저장되어있는 한 참조 (또는 포인터)가 저장되어있는 한 아직 초기화되지 않은 객체에 대한 참조를 전달하는 것이 정확하지만 (가장자리에 가깝지만) 개체가 사용되지 않습니다.