2011-08-01 65 views
0

此代碼在cout行崩潰。任何人都可以解釋爲什麼這不起作用?訪問字符串引用時發生崩潰

#include <iostream> 
#include <string> 

using namespace std; 

class myclass { 
    const string& m_str; 

public: 
    myclass(string s) : m_str(s) {} 
    const string& getString() const { return m_str; } 
}; 

int main() { 
    const string str("honey"); 
    myclass mc(str); 
    cout << mc.getString() << "\n"; 
    return 0; 
} 
+0

http://ideone.com/iCpqb – Fozi

回答

5

myclass構造正在由值的字符串,這使得它暫時的。然後,您將此臨時文件綁定到m_str成員。只要構造函數退出,您的成員引用就會失效。相反:myclass(const string& s) : m_str(s) {}

即使這樣,可能不是一個好主意。一般而言,使用引用作爲成員會很危險,因爲您必須非常清楚生命週期語義。除非你有特殊的理由不這樣做,否則你應該考慮只在類中存儲字符串。

+0

我只是在玩真實的參考來試圖理解發生了什麼。如果字符串很大,它可能是我想的一個好方法。 –

相關問題