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

构造函数内能否使用weak_from_this()?C++技术问询

在构造函数中使用weak_from_this()是否可行?

咱们先达成一个共识:在类的构造函数里调用shared_from_this()绝对是踩坑行为——这时候对象还没被任何shared_ptr接管,调用它要么抛出std::bad_weak_ptr异常,要么返回无效的指针,完全不符合预期。

那回到你的问题:构造函数里能不能用weak_from_this()?

根据C++标准相关说明:

这是enable_shared_from_this中私有可变weak_ptr成员的副本。

从语法层面来说,这么做是合法的,不会触发编译错误,也不会直接抛出运行时异常。但这里有个很容易被忽略的关键细节:在构造函数执行期间,enable_shared_from_this内部的那个私有weak_ptr还没有被初始化绑定到任何shared_ptr上。

当你用shared_ptr管理一个继承了enable_shared_from_this的对象时,shared_ptr的构造逻辑是在对象本身构造完成后,才会去初始化enable_shared_from_this内部的weak_ptr,把它和自身绑定。所以在构造函数里调用weak_from_this(),得到的只是一个空的weak_ptr——调用它的lock()方法只会得到nullptr,根本没法实现“获取当前对象弱引用”的目的。

最后总结一下:

  • 语法上允许在构造函数中调用weak_from_this(),不会直接报错
  • 但实际逻辑上毫无意义,因为得到的是未绑定的空弱指针,完全达不到预期效果

内容的提问来源于stack exchange,提问作者Björn M.P.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:12:04