問題タブ [shared-ptr]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c++ - 共有ポインタはどのように機能しますか?
共有ポインターは、そのオブジェクトを指しているポインターの数をどのように知るのでしょうか? (この場合は shared_ptr)
c++ - shared_ptr を使用して RCU (read-copy-update) を実装しますか?
私はユーザー空間の RCU (read-copy-update) に非常に興味があり、tr1::shared_ptr を介してシミュレートしようとしています。コードは次のとおりです。私は並行プログラミングの初心者ですが、何人かの専門家が助けてくれますか?私がレビューしますか?
基本的な考え方は、リーダーが get_reading_copy() を呼び出して、現在保護されているデータ (第 1 世代または G1 としましょう) のポインターを取得することです。ライターは get_updating_copy() を呼び出して G1 (G2 としましょう) のコピーを取得し、クリティカル セクションに入ることができるライターは 1 つだけです。更新が完了した後、ライターは update() を呼び出してスワップを実行し、m_data_ptr が G2 データを指すようにします。現在進行中のリーダーとライターは G1 の shared_ptr を保持しており、最終的にリーダーまたはライターのいずれかが G1 データの割り当てを解除します。
新しいリーダーはすべて G2 へのポインターを取得し、新しいライターは G2 のコピーを取得します (G3 としましょう)。G1 はまだリリースされていない可能性があるため、複数世代のデータが共存している可能性があります。
c++ - boost::shared_ptrでmem_fun_refを使用する
このページのアドバイスに従って、 shared_ptrにdeleteの代わりにIUnknown :: Release()を呼び出させようとしています。
エラーC2784:'std :: const_mem_fun1_ref_t <_Result、_Ty、_Arg> std :: mem_fun_ref(_Result(__ thiscall _Ty :: *)(_ Arg)const)':'_Result(__thiscall _Ty :: *)のテンプレート引数を推測できませんでした(_Arg)const'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2784:'std :: const_mem_fun_ref_t <_Result、_Ty> std :: mem_fun_ref(_Result(__thiscall _Ty :: *)(void)const)':'_Result(__thiscall _Ty :: *)(void )const'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2784:'std :: mem_fun1_ref_t <_Result、_Ty、_Arg> std :: mem_fun_ref(_Result(__thiscall _Ty :: *)(_ Arg))':'_Result(__thiscall _Ty :: *)( _Arg)'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2784:'std :: mem_fun_ref_t <_Result、_Ty> std :: mem_fun_ref(_Result(__thiscall _Ty :: *)(void))':'_Result(__thiscall _Ty :: *)(void)のテンプレート引数を推測できませんでした'from' ULONG(__cdecl IUnknown :: *)(void) '
エラーC2661:'boost :: shared_ptr :: shared_ptr':オーバーロードされた関数は2つの引数を取りません
これをどうすればいいのかわからない。私の限られたテンプレート/ファンクターの知識が私を試してみました
しかし、役に立たない。何か案は?
c++ - 非オブジェクト型のC++スマートポインタ?
auto_ptr、shared_ptr などのスマート ポインターを使用しようとしています。ただし、この状況での使用方法がわかりません。
よくわかりませんが、ストレージ変数は単に malloc されたメモリであり、C++ クラス オブジェクトではないと思います。ストレージ変数にスマート ポインターを使用する方法はありますか?
ありがとうございました。
c++ - boostのweak_ptrから生のポインターを取得できますか?
boost :: weak_ptrから生のポインタを取得することは可能ですか?Boostのshared_ptrにはget()メソッドと"->"演算子があります。weak_ptrが同じ機能を持たない理由はありますか?
c++ - boost::shared_ptrのtypedefに名前を付ける
ばかげた質問ですが、クラスFooがあるとしましょう。
const Foo :: RcPtrを使用しても、非constメソッドがクラスで呼び出されるのを防ぐことはできません。コンパイルすると、次のようになります。
しかし、typedefにConstRcPtrという名前を付けると、私には、typedefが次のようになることを意味します。
これは私が興味を持っているものではありません。奇妙な名前ですが、おそらくもっと正確なのはRcPtrConstです。
ただし、RcPtrConstのグーグルはヒット数がゼロであるため、これをtypedef名として使用することはありません:)
他に何か提案はありますか?
c++ - boost::shared_ptr -> 演算子がインラインで宣言されていないのはなぜですか?
boost::shared_ptr
非常に頻繁に呼び出される可能性があり、単純にポインターを返すため、演算子は の良い候補ではありません->
かinlined
?
inline
とにかく、優れたコンパイラは自動的にこれを行いますか?
これで睡眠を失う必要がありますか?:-)
c++ - intrusive_ptr:なぜ共通ベースクラスが提供されないのですか?
boost::intrusive_ptr
が必要intrusive_ptr_add_ref
でありintrusive_ptr_release
、定義する必要があります。これを行う基本クラスが提供されないのはなぜですか?ここに例があります:http://lists.boost.org/Archives/boost/2004/06/66957.phpですが、ポスターには「これが必ずしも良い考えだとは思わない」と書かれています。なぜだめですか?
更新:このクラスが多重継承で誤用される可能性があるという事実は十分な理由ではないと思います。独自の参照カウントを持つ複数の基本クラスから派生するクラスでも、同じ問題が発生します。これらのrefcountが基本クラスを介して実装されているかどうかは、違いはありません。
マルチスレッドに問題はないと思います。boost::shared_ptr
アトミック参照カウントを提供し、このクラスも可能です。
c++ - ブースト shared_ptr を使用したカスタム (プール) アロケーター
Boost の Pool インターフェイスなど、shared_ptr によって管理されるオブジェクトをプールから割り当てたいのですが、どうすれば実現できますか?
c++ - shared_ptrはどこにありますか?
shared_ptrがどこにあるかを見つけようとして数時間経った今、私はとてもイライラしています。私が見ている例のどれも、(そして機能している)ヘッダーを含めるための完全なコードを示していませんshared_ptr
。単に述べるだけstd
で、tr1
まったく<memory>
役に立たない!ブーストをダウンロードしましたが、それでも表示されません。誰かがそれを見つける場所を正確に伝えることによって私を助けることができますか?
欲求不満を解消させてくれてありがとう!
編集:タイトルが変更されたようです。申し訳ありません。それで...それはまた、shared_ptrが「C ++バージョン依存」であることが私には明らかではなかったためです->それが私の環境を述べなかった理由です->したがって、おそらく私がそれを見つけるのが非常に困難だった理由です。
私はMSVS2008に取り組んでいます。
編集2:理由はわかりませんが、shared_ptrを探している間、[memory]と[boost / tr1/memory.hpp]と[boost/tr1 / tr1 / memory]を含めていました。もちろん、できませんでした。 't。
すべての回答をありがとう。