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

0 投票する
6 に答える
2469 参照

c++ - ブーストのshared_ptr(shared_ptrとはconst & r, T * p) に使用されますか?

boost::shared_ptr異常なコンストラクターがあります

これが何に役立つのか、私は少し困惑しています。基本的に と所有権を共有しますrが、.get()を返しpます。じゃない r.get()

これは、次のようなことができることを意味します。

そして、あなたはこれを得るでしょう:

ポインタは別々ですが、どちらも ause_countが 2 であると主張していることに注意してください (同じオブジェクトの所有権を共有しているため)。

したがって、int所有者はまたはxが存在する限り存在します。ドキュメントが正しいことを理解していれば、2番目のドキュメントは決して破壊されません。次のテストプログラムでこれを確認しました。x yint

これは(予想どおり)出力します:

では、あるポインターの所有権を共有するが、使用すると別のポインター (所有していない) のように機能する、この異常な構造の有用性は何ですか。

0 投票する
7 に答える
8496 参照

c++ - boost :: shared_ptrを手動でインクリメントおよびデクリメントしますか?

C ++でshared_ptrのカウントを手動でインクリメントおよびデクリメントする方法はありますか?

私が解決しようとしている問題は次のとおりです。私はC++でライブラリを作成していますが、インターフェイスは純粋なCである必要があります。内部的には、shared_ptrを使用して、Cインターフェイスを介して生のポインタを渡す機能を維持しながらメモリ管理を簡素化したいと思います。

インターフェイスを介してrawポインターを渡すときに、参照カウントをインクリメントしたいと思います。クライアントは、渡されたオブジェクトが不要になったときに参照カウントをデクリメントする関数を呼び出す責任があります。

0 投票する
7 に答える
3772 参照

c++ - 大規模なライブラリを必要としないまともな shared_ptr 実装?

現在、GIS プログラミングの C++ プログラミング クラスを受講しています。適切なメモリ管理を扱うことから、私は本当に多くの頭痛の種になり始めています。いつでも 8 ~ 10 個のクラスがあり、それぞれが 3D マトリックスまたはその他の非常に大きなものへのポインターを保持していることを考慮してください。現在、私たちのクラスはすでに、Boost、または少なくとも 2008 年の C++ Feature Pack (TR1 用) を使用できるようにする prof の問題を提起しています。彼は拒否しましたが、私たちが望むなら、いくつかのサードパーティの cpp/hpp ファイルを追加できると言いました。私はすでに shared_ptr をブーストから外そうとしましたが、それはその価値よりも頭痛の種です。

では、無料の shared_ptr 実装はありますか?

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

eclipse - Eclipse CDT + boost::shared_ptr を入手する構文補完を使用するには?

構文補完のために Eclipse CDT で shared_ptr を T * として扱うにはどうすればよいですか?

この例ではウィンドウを使用しています。「Program Files」フォルダに 1.39 があります。1.37を試してみます。

Eclipse の Galileo リリースを使用しています。また、Eclipse でソースを編集および参照し、VC++ Express でビルドするだけです。(でもそれはまた別の話)

0 投票する
14 に答える
33671 参照

c++ - boost :: shared_ptrからポインタを解放する方法は?

boost :: shared_ptrは、保存されているポインターを削除せずに解放できますか?

ドキュメントにリリース機能が存在しないことがわかります。また、FAQには、リリース機能が提供されない理由が説明されています。たとえば、一意でないポインターではリリースを実行できません。私のポインタはユニークです。ポインタを解放するにはどうすればよいですか?または、使用するスマートポインタークラスをブーストして、ポインターを解放できるようにしますか?auto_ptrを使用するとは言わないでください:)

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

c++ - shared_ptr と参照への C++ 参照

全て、

最近、この質問を DAL 設計に投稿しました。そのことから、オブジェクトへの参照を関数に渡し、その関数でそのオブジェクトに値を設定することは、C++ データ アクセス レイヤーの適切なインターフェイスになるように思われます。

boost::shared_ptr への参照を使用する方が良いかどうか疑問に思っています。

何かご意見は?一方が他方よりも優れているか?

両方の呼び出しに const の正確性を適用すると、どのような影響がありますか?

前もって感謝します。

0 投票する
7 に答える
3608 参照

c++ - 共有ポインタとパフォーマンス

私は今しばらくの間共有ポインターを使用しており、プログラムにパフォーマンスの問題があります...共有ポインターがパフォーマンスの低下につながるかどうかを知りたいです。もしそうなら、どのくらい難しいですか?どうもありがとう。

私のプログラムは std::tr1::shared_ptr を使用してマルチスレッド化されています

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

c++ - ヒープの破損を修正する方法

私は非常に最小限のメモリ読み取りライブラリを構築して、そこからいくつかunsigned intの を読み取ろうとしました。ReadUnsignedIntただし、メソッドが戻りたいときに、「HEAP CORRUPTION DETECTED」というエラー メッセージが表示されます。

ヒープ破損が検出されました。CRT は、アプリケーションがバッファーの終了後にメモリに書き込んだことを検出しました。

私が読んだように、これは何かを二重に削除しようとするときの原因かもしれません。これは の誤った使用が原因である可能性がありますが、何が間違っているのstd::tr1::shared_ptrか特定できません。コードは次のとおりです (エラー処理は省略)。

0 投票する
6 に答える
4224 参照

c++ - C++ で効率的な画像バッファを設計するには?

複数のモジュール間で共有されるデータ バッファー、具体的にはイメージ バッファーを作成しようとしています。これらのモジュールはバッファから読み取るだけで、互いにまったく通信しません。私の難しさは次のとおりです。

1.データサイズが大きい:

イメージごとに 10M を超える、つまり、これらのデータを別のスレッドにコピーすることは望ましくありません

2.記憶が乱暴になりたくない:

新しいデータが(リアルタイムで)継続的に入ってくるため、すべてのモジュールが使用を終了したら、非常に古いデータを削除する必要があります。

ただし、物事をさらに複雑にするために、データを消費するモジュールのペースは異なります。一部はより高速/低速で、一部は結果を得るためにより多くのデータ (複数の画像) を必要とし、一部はより少ない (1 つの画像のみ) 必要があります。

最初の問題を解決するために shared_ptr を使用することを考えていました: ブースト shared_ptr(s) のキューを作成し、各 shared_ptr() がイメージ (char 配列) を指すようにします。次に、これらのポインターのサブセットを別のモジュールに渡します。

私はこのスマート ポインター フィールドの初心者です。この問題の良い解決策は何ですか?

ありがとう。

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

c++ - dllインターフェイスでshared_ptrを使用する

dllに抽象クラスがあります。

IBasedllをロードするexeファイルを取得したい。最初の方法は、次の関数を作成することです

に仮想関数を追加しRelease()ますIBase

2番目の方法は別の関数を作成することです

Release()関数は必要ありません。

質問。

1)2番目のケースでは、デストラクタとメモリの割り当て解除がdll(exeファイルではなく)で呼び出されるというのは本当ですか?

2) exeファイルとdllが異なるコンパイラ(または異なる設定)でコンパイルされた場合、2番目のケースはうまく機能しますか?