[英]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.