访问对字符串的引用时崩溃
Crash on accessing reference to string
这段代码在输出行崩溃。有人能解释一下为什么这不起作用吗?
#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) {}
即便如此,这可能也不是一个好主意。一般来说,使用引用作为成员可能是危险的,因为您必须非常清楚生命周期语义。你应该考虑在你的类中按值存储字符串,除非你有特殊的理由不这样做。
相关文章:
- 为什么引用传递会导致此崩溃(C++)
- 对 const 引用参数使用默认值会导致崩溃
- Android (ART) 崩溃并显示错误 JNI 在应用程序中检测到错误:jstring 是无效的本地引用
- 取消引用会导致崩溃,即使对于非 NULL 指针也是如此,原因也是如此
- 为什么通过引用传递从 std::function 派生的对象会使程序崩溃?
- 当通过结构中的指针引用COM_PTR的向量时,向量大小未知时崩溃
- 为什么会崩溃?对函数中静态变量的c++引用无效
- 使用引用的项目时 C# 项目崩溃C++"System.IO.FileNotFoundException"
- C++:在重载 ostream >> 时引用 2D 数组元素时崩溃
- 类成员作为对另一个的引用:赋值运算符中的崩溃
- 子弹物理由于无效引用而崩溃
- 内核崩溃-无法处理000002c0处的内核NULL指针取消引用
- 我无法通过类 Artist 的公共方法修改任何私有字段。我尝试在函数名称之前添加引用(&),但崩溃了
- "Magic static" 在另一个翻译单元的静态销毁阶段引用时单例崩溃
- 通过不返回引用来防止下标操作符的赋值会导致运行时崩溃
- 为什么在使用空引用参数时崩溃,而不是在初始化参数时崩溃?
- c++程序在读取NULL引用时崩溃
- 访问对字符串的引用时崩溃
- Windows内CreateThread类函数调用,指针引用崩溃
- 取消引用 NULL 指针是否保证在 C/C++ 中使程序崩溃