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

关于std::shared_ptr同时使用->与.运算符的原理疑问

关于std::shared_ptr同时使用->与.运算符的原理疑问

嗨,这个问题问得特别到位!其实你只要搞清楚std::shared_ptr的本质,这个困惑就迎刃而解啦——它不是原生指针,而是一个C++标准库提供的模板类实例对象!

咱们拆开来说两种运算符的用法:

  • 用.的时候:比如u.use_count(),这里的.是在调用shared_ptr这个类自己的成员函数。use_count()是shared_ptr内置的方法,专门用来返回当前它托管的对象被多少个智能指针共享(也就是引用计数),所以既然u是一个类对象,调用它自己的成员自然要用.运算符。
  • 用->的时候:比如u->data,这个->是shared_ptr类特意重载的运算符。它的作用是帮你拿到u内部托管的那个原生指针(也就是指向test对象的指针),然后用这个原生指针去访问test类的data成员。简单说,u->data等价于(*u).data——因为shared_ptr还重载了*运算符,解引用后就能得到它托管的test对象,再用.访问对象成员,而->就是这个操作的语法糖,让它用起来更像原生指针。

回到你的代码里,u是std::shared_ptr<test>类型的对象,所以它既有自己的成员函数(比如use_count()),又通过重载运算符模拟了原生指针的行为(支持->访问托管对象的成员),这就是同一个变量能同时用两种运算符的核心原因啦!

备注:内容来源于stack exchange,提问作者RaHuL

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 09:28:08