访问对字符串的引用时崩溃

Crash on accessing reference to string

本文关键字:崩溃 引用 字符串 访问      更新时间:2023-10-16

这段代码在输出行崩溃。有人能解释一下为什么这不起作用吗?

#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;
}

myclass构造函数按值接受字符串,这使得它是临时的。然后将这个临时对象绑定到m_str成员。只要构造函数退出,成员引用就会失效。改为:myclass(const string& s) : m_str(s) {}

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