私はenable_shared_from_this<Base>
を使用していて、Base
から継承しています。 Derived
のコンストラクタ(イニシャライザリストではない)にshared_from_this()
を使用しようとすると、例外が発生します。内部弱ポインタがヌルで、this
をまったく指していないことがわかります。これはどうしたらできますか?私の他のユースケースはまったく問題なく動作します。私はどこから始めるべきか分からない。私はenable_shared_from_this
のソースコードを見て、それは常にnullptrになるポインタのように私に見えます。enable_shared_from_this - 空の内部弱ポインタ?
答えて
オブジェクトのコンストラクタ内でshared_from_this()
を呼び出すことはできません。 shared_from_this()
は、オブジェクトが少なくとも1つのshared_ptr
によって所有されていることが必要です。構成する前にオブジェクトをshared_ptr
で所有することはできません。
shared_ptr
がオブジェクトの所有権を初めて取得したときに内部ウィークポインタが設定されていると思います。その前に、ウィークポインタが参照できる参照カウント構造体はありません。
James McNellis's answerが正しい。 this pageの一番下に何もしないように見えるあなたが観察としてenable_shared_from_this
テンプレート自体の説明、については
、ノート7は説明する:
...テンプレート
enable_shared_from_this
はweak_ptr
オブジェクトを保持しています派生オブジェクト を指しています。しかし、 鳥と卵の問題については、約weak_ptr
オブジェクト がない場合は対応するshared_ptr
オブジェクトを初期化する方法があります。実装 トリックはshared_ptr
のコンストラクタを約enable_shared_from_this
を知っている、と 公共 基底クラスとしてenable_shared_from_this
を持っている リソースを所有shared_ptr
オブジェクトの構築時にweak_ptr
オブジェクトを設定することです。
は概念的には、shared_from_this()
this
にshared_ptr
ポインティングをピックアップし、そのコピーを返します。
コンストラクタでは、this
を指すshared_ptr
がありません。
- 1. これにコンストラクタ内の弱いポインタ
- 2. 強いポインタと弱いポインタとは
- 3. のstd :: enable_shared_from_this :: shared_from_thisが
- 4. enable_shared_from_this Vsダイレクトアサイン
- 5. 弱い/強い参照ポインタの関係
- 6. 生ポインタと弱ポインタの違いは何ですか?
- 7. ブースト::工場:: enable_shared_from_thisクラス
- 8. 弱い参照またはポインタ
- 9. プライベート基本クラスのエラーenable_shared_from_this
- 10. C++ - ベクトルへの内部ポインタを取得
- 11. 空ポインタのメモリ
- 12. 弱いエンティティと外部キー
- 13. boost :: numeric :: ubas :: vector内部データ格納ポインタ
- 14. ブロック内の弱い参照
- 15. RecyclerView内のCardView内部RecyclerView findViewByIdにnullポインタを投げる
- 16. Javaの空の匿名の内部クラス
- 17. 空虚は弱い交互オートマトン
- 18. 空のPHPファイルの内部サーバーエラー500
- 19. PythonのReplcaeの内部空間
- 20. 外部画像の脆弱性
- 21. 弱いvarと2つのクラス間のポインタの問題
- 22. plyr R空の内部結合
- 23. Cでの外部ポインタと静的ポインタ
- 24. Objective-C:メソッドの内部で定義されたブロックは強弱ですか?
- 25. マクロパラメータリスト内のポインタ
- 26. オブジェクトの内部構造のポインタにアクセスする
- 27. C++で親に弱いポインタを維持するには?
- 28. 弱い静的ポインタを使用できますか?
- 29. TypeScript:名前空間内での内部インターフェイスの使用方法
- 30. 弱ブロック内の参照およびサイクル
本当に重複しない:http://stackoverflow.com/questions/4428023/enable-shared-from-this-c0x-what-am-i-doing-wrong –