簡體   English   中英

我可以和另一個類成員一起初始化初始化列表中的對象嗎?

[英]Can I initialize an object in the initialization list with another class member?

在網站上還沒有發現這個問題。 假設我有兩個類,一個類引用另一個:

class ClassA {};

class ClassB
{
    classA & r_classA;
    public:
        ClassB( ClassA & io_classA ):r_classA( io_classA ){}
};

因此,如果要創建ClassB的實例,則必須在構造函數中將其傳遞給classA的引用:

int main()
{
    ClassA classA;
    ClassB classB ( classA );
    return 0;
}

現在說我創建一個包含這兩個的ClassC類:

class ClassC
{
    ClassA m_classA;
    ClassB m_classB;
    public:
        ClassC();
}

我的問題是,我可以指望在初始化列表中構造m_classB之前創建的m_classA嗎? 也就是說,我可以這樣做:

ClassC::ClassC()
: m_classA()
, m_classB( m_classA )
{}

該標准符合要求嗎? 便攜式? 我需要采取特殊預防措施嗎? 我已經在ClassC主體中的m_classB之前聲明了m_classA,並且編譯器未引發任何警告。 該程序似乎工作正常。 我只想檢查一下,我沒有指望某些會導致崩潰或奇怪錯誤的不可靠行為。

類成員是按照其聲明順序進行初始化的,因此您的代碼定義明確,可以按照您的想法進行操作。

(如果構造函數初始化器列表的順序與聲明的順序不同,那么好的編譯器應該警告您,因為這確實是錯誤的細微來源。但是您的代碼正確地執行了此操作。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM