相关疑难解决方法(0)

string_view 真的在促进释放后使用错误吗?

根据一篇文章(这里和那里),这段代码是一个错误的使用后免费示例:

#include <iostream>
#include <string>
#include <string_view>

int main() {
  std::string s = "Hellooooooooooooooo ";
  std::string_view sv = s + "World\n";
  std::cout << sv;
}
Run Code Online (Sandbox Code Playgroud)

文章中说使用strings 时将释放 s string_view!这与我的调试经验背道而驰。但我要求您确认/验证/检查这一点。

根据我的经验,堆栈/范围变量在范围退出时被释放(调用析构函数将是更正确的措辞)。这意味着在这种情况下,这将发生在std::cout << sv;

但是我从来没有使用过string_view,所以我不知道这个对象的任何内部机制。

如果确实是危险行为,您能解释一下吗?否则,我很高兴阅读确认范围变量析构函数仅在当前范围的退出时被调用,自然地,或者在抛出异常时,中断当前范围内的线程。


编辑:在前两个答案之后,它确实是一个使用后免费使用。

附属问题:你认为我们可以在string_view的定义中添加一个带有delete关键字的移动构造函数来禁止吗?

c++ dangling-pointer

5
推荐指数
1
解决办法
794
查看次数

标签 统计

c++ ×1

dangling-pointer ×1