千家信息网

C++中为什么不要使用从破损的智能指针​获取的指针或引用

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,本篇内容主要讲解"C++中为什么不要使用从破损的智能指针获取的指针或引用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中为什么不要使用从破损的智能指
千家信息网最后更新 2026年11月02日C++中为什么不要使用从破损的智能指针​获取的指针或引用

本篇内容主要讲解"C++中为什么不要使用从破损的智能指针获取的指针或引用",感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习"C++中为什么不要使用从破损的智能指针获取的指针或引用"吧!

R.37: 不要使用从破损的智能指针获取的指针或引用

Reason(原因)

违反本规则是引用计数丢失和发生悬空指针的第一号理由。函数更应该沿着调用链向下传递原始指针和引用。你应该在调用树的最顶端,从可以保证对象存在的智能指针获得原始指针或引用。你需要保证智能指针不会在调用树的下面被不小心重置或者重新赋值。

Note(注意)

要做到这点,你需要获取一个智能指针的局部拷贝,通过它可以在函数和调用树执行期间将对象牢牢地锁定。

Example(示例)

考虑以下代码:

// global (static or heap), or aliased local ...
shared_ptr g_p = ...;

void f(widget& w)
{
g();
use(w); // A
}

void g()
{
g_p = ...; // oops, if this was the last shared_ptr to that widget, destroys the widget
}

下面的代码应该无法通过代码评审:

void my_code()
{
// BAD: passing pointer or reference obtained from a non-local smart pointer
// that could be inadvertently reset somewhere inside f or its callees
f(*g_p);

// BAD: same reason, just passing it as a "this" pointer
g_p->func();
}

为了改正这个问题--获取指针的局部拷贝以便为调用树"保持引用计数"。

void my_code()
{
// cheap: 1 increment covers this entire function and all the call trees below us
auto pin = g_p;

// GOOD: passing pointer or reference obtained from a local unaliased smart pointer
f(*pin);

// GOOD: same reason
pin->func();
}
Enforcement(实施建议)
  • (简单)如果函数调用时使用了一个从非局部智能指针变量(Unique_pointer or Shared_pointer)获取的指针或者引用,报警。智能指针是局部变量但是可能是别名时也报警。如果智能指针是一个Shared_pointer,建议获取一个智能指针的局部拷贝然后从该拷贝获取指针或引用。

到此,相信大家对"C++中为什么不要使用从破损的智能指针获取的指针或引用"有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

指针 智能 局部 破损 拷贝 C++ 代码 函数 原始 内容 变量 对象 建议 保证 学习 报警 实用 更深 兴趣 别名 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网巨头科技公司 猪兼强互联网科技 上海喔噻互联网科技 善班互联网科技有限公司 北京禾田雨橡互联网科技 掌上梦互联网科技 互联网科技咨询 中国互联网金融科技基金 互联网科技素材视频竖屏 互联网之后的科技是什么 互联网科技实习生岗位职责 苏州五指互联网络科技有限 洛阳共同富裕互联网科技有限公司 中科明德北京互联网科技 互联网方面的科技前沿 珠海东科互联网科技有限公司 普陀区互联网教育科技管理办法 瑞安市蟠桃会互联网科技有限公司 科技互联网企业在行动 高科技和互联网的现代国家 小马过河互联网科技 百单互联网科技有限公司 互联网汽车科技小镇 中国互联网公司排名锤子科技 互联网科技实习生岗位 厦门江牛科技互联网 广州燕处互联网科技有限公司 信承诺互联网科技有限公司 国产互联网科技公司 每日互联网科技新闻
0