标准命令enable_shared_from_this是否公开继承?为什么?

时间:2016-07-03 01:17:51

标签: c++ c++11 language-lawyer libstdc++ libc++

enable_shared_from_this继承只是为了能够从成员函数返回shared_ptr作为主要意图,并不打算公开enable_shared_from_this,这是很常见的。派生类中的API。

既然要使用enable_shared_from_this,必须通过公共继承来做到这一点(标准是否规定了这个?理由是什么?),这无法实现,{{1} API被强制导入到派生类的公共API中。

隐私enable_shared_from_this私有并使enable_shared_from_this成为朋友类可以使用与libc ++相结合的clang,但不能使用stdlibc ++。

由于shared_ptr + private enable_shared_from_this(或受保护的继承)似乎涵盖了这个用例,因此适合作为"共享的解决方案的标准是不够的从这"问题

1 个答案:

答案 0 :(得分:2)

  

由于private enable_shared_from_this +朋友shared_ptr似乎涵盖了这个用例,标准不应该足够吗?

没有。该标准允许实现具有如何实现的宽范围。采用对象的shared_ptr<T>的构造函数可以将共享的东西推迟到某个辅助函数或其他对象。最大的讽刺是,它可以推迟到shared_ptr<T>;)的基类

因此,任何代码都必须可以访问enable_shared_from_this,以便shared_ptr构造函数能够正常工作。