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

pep*_*ico 7 c++ libstdc++ language-lawyer c++11 libc++

继承enable_shared_from_this只是为了能够shared_ptr从成员函数返回作为主要意图,而无意enable_shared_from_this在派生类中公开API.

因为要使用enable_shared_from_this一个必须通过公共继承这样做(标准是否要求这个?基本原理是什么?),这是无法实现的,并且enable_shared_from_thisAPI被强制导入到派生类的公共API中.

Inherenting enable_shared_from_this私下和制作shared_ptr的朋友千万级铛上加上的libc ++工作,但不与stdlibc ++工作.

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

Nic*_*las 3

既然private enable_shared_from_this+friendshared_ptr似乎涵盖了这个用例,那么根据标准它不应该足够吗?

不会。该标准允许实施者在实施方式上有很大的自由度。采用对象的构造函数shared_ptr<T>可能会将共享的东西推迟到某些辅助函数或其他对象。为了最大程度地讽刺,它可以遵循基类shared_ptr<T>;)

因此,enable_shared_from_this必须可由任何代码访问才能使shared_ptr构造函数正常工作。

  • @pepper_chico:您必须在每个试图获取指向标准库函数的函数指针/成员指针的人后面排队。 (2认同)