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

C++中能否私有继承enable_shared_from_this?私有继承是否更优?

关于私有继承enable_shared_from_this的问题

首先明确:你完全可以私有继承enable_shared_from_this<A>,你贴出的代码是合法且能正常运行的。

为什么可行?因为enable_shared_from_this的核心是内部维护了一个与对象关联的weak_ptr,而它的shared_from_this()成员函数在私有继承后,对于类A的内部成员函数来说是可访问的——私有继承的规则是把基类的public/protected成员变成派生类的私有成员,派生类自身的成员函数有权访问这些私有成员,所以你的func()方法能顺利调用shared_from_this()并返回正确的shared_ptr<A>。

那私有继承是不是比公有继承更合适?这得看你的设计目标:

  • 如果你的类只需要在内部利用shared_from_this的功能,并且不想让外部代码直接调用shared_from_this()(毕竟如果对象没被shared_ptr管理,调用这个方法会触发未定义行为或抛出异常),那私有继承确实更优。这和我们私有继承unCopyable的思路完全一致:我们只是复用基类的实现逻辑,而不是要让类的接口暴露“我继承了这个基类”的关系,封装性更好,能避免外部使用者的误操作。
  • 但如果你的设计允许甚至希望外部代码直接从对象实例获取对应的shared_ptr,那公有继承会更合适——因为私有继承后,外部无法访问基类的shared_from_this()方法,也就没法直接调用它。

最后要提醒一句:不管用哪种继承方式,都必须确保类的对象是被shared_ptr管理的,否则调用shared_from_this()会出问题。

内容的提问来源于stack exchange,提问作者hongyu xiao

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:16:45