2011-08-01 33 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

我只是在玩真实的参考来试图理解发生了什么。如果字符串很大,它可能是我想的一个好方法。 –

相关问题