簡體   English   中英

如何在c ++中顯式初始化引用?

[英]How do you explicitly initialize a reference in c++?

我有以下代碼:

class SomeClass {};

class SomeOtherClass {
    SomeClass& someObj;
public:
    SomeOtherClass() {someObj = SomeClass();}
};

我在SomeOtherClass的構造函數上遇到錯誤,說Constructor for 'SomeOtherClass' must explicitly initialize the reference member 'someObj'

所以我想我的問題非常緊張。 你如何初始化參考?

您正試圖存儲對正在被破壞的臨時對象的引用,因此肯定會出錯; 即使使用其他答案中描述的構造函數初始化列表。

引用應該指向一個存儲在別處的對象,就像指針一樣。 您確定在這種情況下甚至需要使用參考嗎?

作為構造函數初始化列表的一部分

SomeOtherClass() : someObj(SomeClass()) {}

更新:我應該提醒一下,這是你不應該逐字使用的東西,因為它會導致對即將死亡的臨時對象實例的引用。

這個想法是上面的,但你必須傳入一個生命周期不短於你正在構建的SomeOtherClass實例的對象。

您必須在構造函數的初始化列表中初始化它,因為引用沒有“default”或“null”初始化:

class SomeOtherClass {
    SomeClass& someObj;
public:
    SomeOtherClass(SomeClass& sc) : someObj(sc) {}
};

如在另一個答案中指出的那樣編輯 ,您應該注意將引用初始化為一個對象,其生命周期與包含引用的對象相同或更長。 在上面的示例中,假設sc超出SomeOtherClass實例。

暫無
暫無

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

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