2012-04-11 60 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的构造还没有完全建立,所以你不能用它做任何东西,除了商店参考。