You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

返回智能指针解引用的引用类型是否会引发悬空引用?

问题解答

先看对应的C++代码:

const string& show_string(){
    std::shared_ptr<std::string> p = std::make_shared<std::string>("test");
    return *p;
}

这段代码会导致悬空引用,核心原因如下:

  • 函数内的std::shared_ptr<std::string> p是局部变量,生命周期仅局限于show_string()函数执行期间。
  • 函数执行结束时,局部shared_ptr会被销毁,它所管理的std::string对象的引用计数会降至0,该字符串的内存会被自动释放。
  • 函数返回的是*p的引用,也就是指向已被释放的字符串对象的引用。调用者获取该引用后,它指向的是已经回收的无效内存,后续任何对该引用的访问都属于未定义行为。

总结:局部智能指针销毁时会释放其托管的对象,留下的引用自然成了悬空引用。


内容的提问来源于stack exchange,提问作者Eliane Zhu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:05:27