2012-04-11 18 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でのコンストラクタは、まだ完全に構築されていないことに注意してください。

関連する問題