访问字符串引用时崩溃

Ang*_*ber 0 c++ reference

此代码在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;
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*k B 5

myclass构造正在由值的字符串,这使得它暂时的.然后,您将此临时绑定到该m_str成员.随着构造函数退出您的成员引用变得无效.代替:myclass(const string& s) : m_str(s) {}

即便如此,这可能不是一个好主意.一般来说,使用引用作为成员可能很危险,因为您必须非常清楚生命周期语义.您应该考虑只在类中存储字符串,除非您有特殊原因不这样做.