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

标签 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;
}

最佳答案

myclass 构造函数按值获取字符串,这使其成为临时字符串。然后您将这个临时绑定(bind)到 m_str 成员。一旦构造函数退出,您的成员引用就会变得无效。相反:myclass(const string& s) : m_str(s) {}

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

关于c++ - 访问对字符串的引用时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6901494/

相关文章:

c++ - 为什么右值引用整数合法

c++ - 通过引用传递整数到 C++ 中的类

c - 对 gcc pthreads C 中函数的 undefined reference

javascript - 引用嵌套对象的最有效方法

c++ - 为什么对重载函数的调用不明确?

c++ - 将数组的值传递给修改值然后将其返回到新数组的函数

c++ - 使用 mqqueue 将数据读入缓冲区时出现问题

python - Pisarze - 波兰信息学奥林匹克竞赛的数据分析任务

c++ - boost::system::error_code::message 以 -stdlib=libc++ 的形式出现

c - 在 C 中通过引用传递的 3d 数组