問題タブ [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.

0 投票する
5 に答える
23772 参照

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>ますか?

0 投票する
3 に答える
3052 参照

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アトミック参照カウントを提供し、このクラスも可能です。

0 投票する
2 に答える
284 参照

c++ - 「これ」でスマートポインタを使用する

私はブーストスマートポインターの使用法を学んでいますが、いくつかの状況について少し混乱しています。各状態が単一の更新メソッドによって実装されるステートマシンを実装しているとしましょう。各状態は、それ自体を返すか、新しい状態オブジェクトを作成できます。

};

ステートマシンループは次のようになります。

このコードを翻訳して、ブーストスマートポインターを使用できますか?どうしたらいいかわからないので、「これを返す」部分に関しては少し混乱しています。基本的に、「return boost :: shared_ptr(this);」のようなものを返すのは無意味だと思います。安全ではないからです。私は何をすべきか?

0 投票する
1 に答える
60 参照

boost-smart-ptr - ブースト shared_ptr をアトミックに読み取る

この 1 つのオブジェクトにアクセスする 2 つのスレッドがあります。
スレッド A: ブーストhared_ptrメンバーを更新します スレッドB: ブーストshared_ptrメンバーを読み取ります

shared_ptr は整数/実数ポインター型ではないため、スレッド B によってアトミックに読み取ることはできません。

ロックは避けたい。

スレッド B が有効な shared_ptr を取得することをどのように保証できますか?

ありがとう!

0 投票する
3 に答える
6768 参照

c++ - boost::weak_ptrをboost::shared_ptrに変換する方法

shared_ptrとweak_ptrがあります

weak_ptrをshared_ptrに変換する方法

0 投票する
4 に答える
3683 参照

c++ - boost::shared_ptr を実際のクラスに変換する

誰かがそれをどのように行うでしょうか?例えば:

ここで、it->second は boost::shared_ptr からクライアントへのエラーです:

0 投票する
4 に答える
32826 参照

c++ - boost::shared_ptr と動的キャスト

基底クラスの使用に問題がありshared_ptrます。逆参照するときに派生クラスのメソッドを呼び出すことができないようです。コードは私よりも冗長になると思います。

0 投票する
1 に答える
400 参照

c++ - ブーストに一般的な「クリーンアップ」クラスはありますか?

私は単にこれを行うクラスが欲しい:

目的は、削除されたときに func を呼び出すために、この「クリーンアップ」を行うことです。cleanup は shared_ptr として渡されます。

また、boost::shared_ptr でカスタムのデリータを使用することも検討しました。おそらく、boost::shared_ptr を使用して、NULL で作成し、func() を取得して、無視するパラメーターを取得できます。

このすべての目的は、最後の参照がスコープ外になったときにクラスのデストラクタに実行させたいステップを抽象化することです (実際には、クラスがそのコンテナについて知る必要なく、それを保持しているコンテナから自分自身を削除します)。

shared_ptr でそれを行う場合、次のいずれかを渡す可能性があります。

ここで、func はパラメーターを取る必要があります。ポインターが NULL の場合にデリータが常に呼び出されるかどうかも 100% 確信が持てないため、おそらく別のポインターを使用して「乱雑」な外観になるようにする必要があります。

これを処理する標準的な方法はありますか?そうでない場合、最善の方法は何ですか?

0 投票する
1 に答える
1175 参照

java - EclipseでSWIGラップされたC++コードをデバッグするためのヒント?

SWIGでラップした大量のC++コードがあり、Javaから呼び出しています。C ++コードは、ブーストスマートポインターを自由に使用します。

一部のJUnitテストは完了しましたが、クリーンアップ中にセグメンテーション違反が発生しました。スタックトレースは、オブジェクトのファイナライズでメモリエラーを示していますが、SWIGによって生成されたJNIコードで発生しており、スマートポインター参照カウントに関連付けられているようです。

コードのすべてのレイヤーをステップスルーできるようにしたいと思います。これは可能ですか?また、この種の問題について他の人の経験を聞いてとてもうれしく思います。

0 投票する
3 に答える
527 参照

c++ - 期限切れ後のboost::weak_ptrのソート順は?

boost::weak_ptrが定義されているためoperator<、連想コンテナで使用できます。

私の質問は次のとおりです。weak_ptr一部のオブジェクトの参照カウントがゼロに変更された場合でも、いくつかのオブジェクトのソート順は安定していますか? のようなコンテナを台無しにしませんstd::setか?

例:

  • アサート #1 が true の場合、アサート #2 は常に true を保持しますか?
  • Scope1wptrA2の前後で同じ状態ですか?