2012-04-11 2 views
4

다음과 같이 Container 멤버를 초기화하려면 생성자의 멤버 초기화 목록에서 Container 객체에 대한 참조를 해당 생성자의 멤버 초기화 목록에 전달할 수 있습니까? : (코드는 ideone).생성자의 멤버 초기화 목록에있는 객체에 대한 참조 사용

#include <cstdlib> 
#include <iostream> 

struct Container; 

struct Member 
{ 
    Member(Container& container) : m_container(container) 
    { 
    } 

    Container& m_container; 
}; 

struct Container 
{ 
    Container() : m_member(*this) 
    { 
    } 

    Member m_member; 
}; 

int main() 
{ 
    Container c; 
    return EXIT_SUCCESS; 
} 

코드가 컴파일되지만 표준인지 확실하지 않습니다.

답변

5

괜찮습니다. 멤버 참조는 인수로 전달 된 객체를 참조하도록 초기화됩니다.

그러나 아직 Container이 작성 중이므로 해당 생성자에서 액세스하지 않아야합니다. 참조로 할 수있는 유일한 방법은 다른 참조를 초기화하는 것입니다.

또한 컨테이너가 파손 된 후에도 해당 참조를 사용하지 않아야합니다. 이 예제에서는 괜찮습니다 - m_member 및 포함 된 참조는 컨테이너와 함께 삭제됩니다. 당신이 가게 참조를 제외하고 그것으로 아무것도 할 수

4
괜찮아

, 하지만containerMember에서의 생성자는 아직 완전히 구축되지 않는 점에 유의 않습니다.