問題タブ [smart-pointers]
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++ - C++ 設計に関する質問 (安価なスマート ポインターが必要)
ノード内のキーが大きな hash_map v へのインデックスである巨大なツリーがあります。ここで、v[key] はそのキーに関連付けられた (大きな) レコードです (ツリー内でこのキーを持つノードの数を含みます)。現在、キーは整数です。したがって、各ノードには、子のポインターと整数を格納するオーバーヘッドがあります。
ツリーのノードからキーを削除できます。実際のレコードをツリー ノードに格納することはできません (メモリを大量に消費するため)。キーがノードから削除されると、v を見て、カウントを更新し、要素を削除する (そしてベクトルを圧縮する) 必要があります。
これは、スマート ポインターの実装を求めています。ここでは、shared_ptr がツリー全体に広がっています。キー k を参照する最後のノードが削除されると、オブジェクトは破棄されます。
ただし、shared_ptr のサイズ要件には不安があります。安価なリファレンス カウント スマート カウンターが必要です。同時アクセスは気にしません。
boost - ブースト信号-サブスクライバーに送信されるオブジェクトの存続期間をどのように制御しますか?スマートポインタ?
Red Hat EnterpriseLinux5.3でboost::signals2を使用しています。
私のシグナルはオブジェクトコピーを作成し、そのポインターをサブスクライバーに送信します。これは、スレッドの安全性のために実装され、ワーカースレッドがオブジェクトの読み取りと同時にオブジェクトの文字列プロパティを更新するのを防ぎます(おそらく、ロックの使用を再検討する必要がありますか?)。
とにかく、私の懸念は、自分のスレッドでコピーされたオブジェクトへのポインターを逆参照する複数のサブスクライバーにあります。オブジェクトの有効期間を制御するにはどうすればよいですか?すべてのサブスクライバーがオブジェクトを処理し、オブジェクトを安全に削除できることをどのように知ることができますか?
ヒントや方向性を事前に感謝します、
-エド
c++ - auto_ptr 不可解な動作
問題をより具体的にする: 現在、クラスにはコピー コンストラクターがあるため、a.show() によって出力される auto_ptr の値に問題はありません (2 回目に呼び出されたとき)。初期化されたときと同じままです)。それは変わらないままです。クラス MyClass からコピー コンストラクターを削除すると、(2 回目に呼び出されたときに) a.show() によって出力される auto_ptr の値は NULL になります。
c++ - スマート ポインターに関する本
スマートポインタの考え方を分かりやすく説明している本(初級・中級・上級)を教えてください。
ありがとうございました。
c++ - 自動ポインタの長所/短所
通常のポインターと比較して、自動ポインター(auto_ptr)を使用することの長所と短所は何ですか?メモリの自動解放を行うと聞きましたが、なぜ頻繁に使用されないのですか?
c++ - shared_ptr の使用法に関する質問 - C++
の使用に関するベスト プラクティスについていくつか質問がありshared_ptr
ます。
質問1
コピーはshared_ptr
安いですか?それとも、自分のヘルパー関数への参照として渡し、値として返す必要がありますか? 何かのようなもの、
質問2
boost::make_shared
を構築するために使用する必要がありshared_ptr
ますか? はいの場合、どのような利点がありますか? また、パラメーターのないコンストラクターがないmake_shared
場合、どのように使用できますか?T
質問 3
使い方はconst foo*
?これを行うための2つのアプローチを見つけました。
また
質問 4
オブジェクトに戻って確認するNULL
にはどうすればよいですか? shared_ptr
のようなものですか、
どんな助けでも素晴らしいでしょう。
c++ - マルチスレッドプログラムでweak_ptrをブーストして、リソースプールを実装します
私はboost::weak_ptrを使用してオブジェクトのプールを実装し、誰もオブジェクトの1つを使用していないときにそれらが刈り取られるようにすることを考えています。ただし、私の懸念は、これがマルチスレッド環境であり、スコープ外のオブジェクトに対する最後のshared_ptrと、weak_ptrから構築されている新しいshared_ptrとの間に競合状態があるようです。通常、このような操作はロックなどで保護します。ただし、ここで重要なのは、shared_ptrがいつスコープ外になるかわからないということです。
boost::shared_ptrとboost::weak_ptrについて何か誤解していますか?そうでない場合、誰かが何をすべきかについて何か良い提案がありますか?
ありがとう。
アンドリュー
c++ - shared_ptr をスタック上に作成されたオブジェクトと比較する
shared_ptr によってカプセル化されたオブジェクトを、スタック上に作成された同じタイプのオブジェクトと比較したい状況があります。現在、生のポインターを取得し、それを逆参照して比較を行っています。
これを行うより良い方法はありますか?これは、両方のオブジェクトが相互に比較されるときに、一方が shared_ptr であり、他方がそうでないことを前提としています。
c++ - C++ スマート ポインターのサイクルを使用した参照カウント
shared_ptr スマート ポインターでは、参照カウントが使用されます。ただし、参照カウントには問題があり、参照のサイクルを壊すことはできません。
この問題について 4 つの質問があります。
1) 参照のサイクルが発生したスニペットを 1 つ提供してもらえますか?
2) 参照の循環を断ち切ることができない場合、RCSP はどのようにリソース管理の成功を保証しますか? サードパーティ製品でサイクルを断ち切る方法はありますか?
3)参照のサイクルを回避する方法はありますか?
4) 他のスマートポインタはどうですか? 彼らはソース管理をどのように処理しますか? たとえば、share_ptr、scope_ptr?
どうもありがとう!