首页 > 解决方案 > string_view 中如何推导出悬空指针?

问题描述

该参考说明第二个示例产生了一个悬空指针。如何在第二个表达式中创建一个悬空指针,而不是在第一个表达式中?

std::string_view good("a string literal");   // OK: "good" points to a static array
std::string_view bad("a temporary string"s); // "bad" holds a dangling pointer

另外,s字符串后面的字符是什么?

标签: c++c++17

解决方案


s一个用户定义的文字运算符产生一个std::string.

两行之间的区别在于,这一行是good指向string_view字符串文字,而字符串文字具有静态生命周期(它们在整个问题中持续存在)。bad一个是string_view指向一个临时的,string并且该临时拥有它的数据 - 所以当临时被销毁时(在行尾)它会带走它的数据,我们最终bad指向被破坏的内存。


推荐阅读