使用对其构造函数的成员初始化列表中的对象的引用

时间:2012-04-11 17:01:14

标签: c++ constructor pass-by-reference

是否可以将引用传递给其构造函数的成员初始化列表中的对象(类型)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;
}

代码编译但我不确定它的标准。

2 个答案:

答案 0 :(得分:5)

那没关系;初始化成员引用以引用作为参数传递的对象。

但是,由于Container仍在构建中,因此您不能在该构造函数中访问它;你可以用引用做的唯一事情是初始化另一个引用。

您还必须确保在销毁容器后不使用该引用。在这个例子中,它很好 - m_member及其包含的引用随容器一起被销毁。

答案 1 :(得分:4)

没关系,但是注意container的构造函数中的Member还没有完全构造,所以除了存储引用之外你不能做任何事情