从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
(或受保护的继承)似乎涵盖了这个用例,因此适合作为"共享的解决方案的标准是不够的从这"问题
答案 0 :(得分:2)
由于
private enable_shared_from_this
+朋友shared_ptr
似乎涵盖了这个用例,标准不应该足够吗?
没有。该标准允许实现具有如何实现的宽范围。采用对象的shared_ptr<T>
的构造函数可以将共享的东西推迟到某个辅助函数或其他对象。最大的讽刺是,它可以推迟到shared_ptr<T>
;)的基类
因此,任何代码都必须可以访问enable_shared_from_this
,以便shared_ptr
构造函数能够正常工作。