派生クラスにenable_shared_from_this
APIを公開するつもりはなく、enable_shared_from_this
から継承して、メンバー関数の主目的としてshared_ptr
を返すことが一般的です。enable_shared_from_thisという標準的な権限は公に継承されますか?どうして?
enable_shared_from_this
を公開するには、公開されている継承を使用する必要があります(標準ではこれが根拠ですか?)これは達成できず、enable_shared_from_this
APIは派生クラスの公開APIに強制されます。
個人的にはenable_shared_from_this
が固有であり、フレンドクラスはlibC++と結合したclangで動作しますが、stdlibC++では動作しません。
private enable_shared_from_this
+ friend shared_ptr
(または保護された継承)がこのユースケースをカバーしているようだから、「この問題から解決する」問題の解決策として標準では十分ではないでしょうか?
「保護された」つまり、 'class T:protected std :: enable_shared_from_this {...};'を継承することができます。私は自分でそれを試していない –
@ChrisBeck大丈夫です。私は、もしもそれをしたくなければ(「保護された」)、質問はまだ成立していると思います。 –
継承が完全に非公開の場合、 'shared_from_this'メカニズムが機能する方法はないと思います。それがうまくいけば、 'shared_ptr'(参照カウント)の制御構造がクラスの接頭辞に格納されているので、' std :: enable_shared_from_this 'にいくつかのデータメンバーがあります。 'this'から' shared_ptr'を作るためには、 'this'を静的にキャストしてrefカウンタを見つける必要があります。また、 'std :: make_shared'はあなたのタイプでこれを検出できる必要があります。継承がプライベートなら、私は彼らがそれをすることができないと思う。わからない.. –