問題タブ [boost-smart-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スレッドセーフ?
について質問がありboost::shared_ptr<T>
ます。
スレッドがたくさんあります。
Q1
Thread_Aが最新であることを気にしない場合nowResource
、コードのこの部分に問題はありますか?
つまり、 Thread_BSetResource()
が完全ではない場合、 Thread_Aは間違ったスマート ポイントを取得しGetResource()
ます。
Q2
スレッドセーフとはどういう意味ですか?
リソースが最新かどうかを気にしないshared_ptr<CResource> nowResource
場合、 がリリースされたときにプログラムがクラッシュするか、それともnowResource
問題によって が破壊されshared_ptr<CResource>
ますか?
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++ - 「これ」でスマートポインタを使用する
私はブーストスマートポインターの使用法を学んでいますが、いくつかの状況について少し混乱しています。各状態が単一の更新メソッドによって実装されるステートマシンを実装しているとしましょう。各状態は、それ自体を返すか、新しい状態オブジェクトを作成できます。
};
ステートマシンループは次のようになります。
このコードを翻訳して、ブーストスマートポインターを使用できますか?どうしたらいいかわからないので、「これを返す」部分に関しては少し混乱しています。基本的に、「return boost :: shared_ptr(this);」のようなものを返すのは無意味だと思います。安全ではないからです。私は何をすべきか?
boost-smart-ptr - ブースト shared_ptr をアトミックに読み取る
この 1 つのオブジェクトにアクセスする 2 つのスレッドがあります。
スレッド A: ブーストhared_ptrメンバーを更新します スレッドB: ブーストshared_ptrメンバーを読み取ります
shared_ptr は整数/実数ポインター型ではないため、スレッド B によってアトミックに読み取ることはできません。
ロックは避けたい。
スレッド B が有効な shared_ptr を取得することをどのように保証できますか?
ありがとう!
c++ - boost::weak_ptrをboost::shared_ptrに変換する方法
shared_ptrとweak_ptrがあります
weak_ptrをshared_ptrに変換する方法
c++ - boost::shared_ptr を実際のクラスに変換する
誰かがそれをどのように行うでしょうか?例えば:
ここで、it->second は boost::shared_ptr からクライアントへのエラーです:
c++ - boost::shared_ptr と動的キャスト
基底クラスの使用に問題がありshared_ptr
ます。逆参照するときに派生クラスのメソッドを呼び出すことができないようです。コードは私よりも冗長になると思います。
c++ - ブーストに一般的な「クリーンアップ」クラスはありますか?
私は単にこれを行うクラスが欲しい:
目的は、削除されたときに func を呼び出すために、この「クリーンアップ」を行うことです。cleanup は shared_ptr として渡されます。
また、boost::shared_ptr でカスタムのデリータを使用することも検討しました。おそらく、boost::shared_ptr を使用して、NULL で作成し、func() を取得して、無視するパラメーターを取得できます。
このすべての目的は、最後の参照がスコープ外になったときにクラスのデストラクタに実行させたいステップを抽象化することです (実際には、クラスがそのコンテナについて知る必要なく、それを保持しているコンテナから自分自身を削除します)。
shared_ptr でそれを行う場合、次のいずれかを渡す可能性があります。
ここで、func はパラメーターを取る必要があります。ポインターが NULL の場合にデリータが常に呼び出されるかどうかも 100% 確信が持てないため、おそらく別のポインターを使用して「乱雑」な外観になるようにする必要があります。
これを処理する標準的な方法はありますか?そうでない場合、最善の方法は何ですか?
java - EclipseでSWIGラップされたC++コードをデバッグするためのヒント?
SWIGでラップした大量のC++コードがあり、Javaから呼び出しています。C ++コードは、ブーストスマートポインターを自由に使用します。
一部のJUnitテストは完了しましたが、クリーンアップ中にセグメンテーション違反が発生しました。スタックトレースは、オブジェクトのファイナライズでメモリエラーを示していますが、SWIGによって生成されたJNIコードで発生しており、スマートポインター参照カウントに関連付けられているようです。
コードのすべてのレイヤーをステップスルーできるようにしたいと思います。これは可能ですか?また、この種の問題について他の人の経験を聞いてとてもうれしく思います。
c++ - 期限切れ後のboost::weak_ptrのソート順は?
boost::weak_ptr
が定義されているためoperator<
、連想コンテナで使用できます。
私の質問は次のとおりです。weak_ptr
一部のオブジェクトの参照カウントがゼロに変更された場合でも、いくつかのオブジェクトのソート順は安定していますか? のようなコンテナを台無しにしませんstd::set
か?
例:
- アサート #1 が true の場合、アサート #2 は常に true を保持しますか?
- Scope1
wptrA2
の前後で同じ状態ですか?