問題タブ [boost-ptr-container]

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 投票する
1 に答える
343 参照

c++ - 「リリース」時に ptr_container リークを促進しますか?

から解放されたオブジェクトは、ptr_set手動で削除しないとリークされると想定しています。ただし、以下のテスト プログラムでは、valgrind での 2 つのリーク (9/13 行目から) のみが示され、12 行目ではリークはありませreleaseptr_container

出力:

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

c++ - std::unique_ptrとboost::ptr_containerを含むstlコンテナ

c ++ 11があるので、c++11のboost::ptr_containersの代わりがあるかどうか自問していました。たとえば、を使用できることはわかっていますstd::vector<std::unique_ptr<T> >が、これが完全な代替品であるかどうかはわかりません。これらのケースを処理するための推奨される方法は何ですか?

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

c++ - boost::ptr_list で前方宣言されたクラス

小さな科学プロジェクトのために、シミュレートされたすべてのオブジェクトを ptr_list に保持する Simulation クラスをセットアップしました。すべてのパーティクルにすばやくアクセスする必要があるため、追加の ptr_list を追加しました。前方宣言されたクラスが好きではないため、ブーストは不平を言うようになりました。recursive_wrapperすでに指摘されていましたが、ptr_list< recursive_wrapper<Particle> >どちらもうまくいかないようです。

0 投票する
0 に答える
372 参照

c++ - boost :: ptr_map <>および_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)アサーションの失敗

stackoverflowに関する最初の質問は、この問題について助けを得ることを望んでいました。次のEffectManagerクラスを見ると、Effectmanagerインスタンスの割り当てが解除されると、_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)でアサーションエラーが発生します。

エフェクトマップのメモリを解放しようとすることと関係があります。マップにエフェクトを挿入しない場合、この問題は発生しません。

ベースSTLマップを使用する場合も、正常に機能します。



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

c++ - boost::ptr_vector コンストラクター

現在のプロジェクトでを使用しようとしてboost::ptr_vectorいますが、push_back() メソッドでパラメーター化されたコンストラクターを使用できるかどうか、またはデフォルトのコンストラクターを使用する必要があるかどうか疑問に思っていましたか?

二次的な質問として、定義した場合でもデフォルトのコンストラクターを使用しますか?


これは最良のフォローアップではないかもしれませんが、私が見た実装のほとんどは、メソッドが演算子を取るboost::ptr_vectorことを示しています。オブジェクトを作成し、そのオブジェクトへのポインタをコンテナのメソッドに渡すことはできますか?push_back()newpush_back()

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

c++ - オブジェクトを部分的にソートする高速な方法

私は一連のオブジェクト (約 20) を定義するルーチンを持っていJetます<。それらがソートされた後、私は最も低い2つを取ります。これを行うための迅速な方法は何ですか?これまでに考えたオプション:

  1. boost::ptr_vector<Jet>組み込みの を使用し.sort()、最初の 2 つを取得し、
  2. boost::ptr_list<Jet>、使用.sort()、最初の 2 つを取る
  3. 上記のようにリストを使用しますが、ソートするのではなく、 を使用max_elementして要素を削除し、再度実行します。

次の理由から、使用std::vector<Jet>が最悪のオプションになると思います。ランダムアクセスは必要ありません。ソートはオブジェクトをメモリ内で移動します。を呼び出したときにオブジェクトがコピーされますpush_back(Jet)std::list<Jet>コピーが必要なため、 anは よりも悪いと思いboost::ptr_list<Jet>ます。max_elementさらに、リスト全体をソートするよりも 2 回取得する方が高速であると想定します。

私の論理は健全ですか?パフォーマンスの違いは重要ですか?私が考えていない他のオプションはありますか?

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

c++ - アロケーターのクローン作成と、boost::ptr_container でのポリモーフィズム

私の現在のプロジェクトでは、ポリモーフィックboost::ptr_vectorに保持するために を使用していますが、ObjectsVS2010 ビルドの 1 つが を複製できないとスローするまで、すべて正常に機能していobjectましたnew_clone()c++ FAQはそれを作成しましboostたが、現在、VS2010 は、抽象クラスでクローンを使用できないと言って、この shanagin を私に投げかけています。pure virtual

これは、boost でクローンを作成できるようにするには、抽象基本クラスを破棄する必要があるということですか?


ノート:

  • 抽象基本クラスのオブジェクトがプログラムに存在することは決してありませんが、ほとんどすべてがそのように扱われます。
  • クローンメソッドを非仮想にし、実際に何かを返す手段を与えると(コンストラクター/コピーコンストラクターを提供します。これは、設計に反する存在する可能性があることを意味します)、コンパイラーは、すべての派生クラスにデフォルトのコンストラクタ。それらを持たないのは設計によるものです。

編集:私は実装していませんdelete_clone()(それが明示的に必要であることに気づいていなかったので、デストラクタはうまくいくと思います)

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

c++ - 抽象基本クラスのptr_mapを含むマッピングオブジェクト

boost::ptr_map抽象基本クラス(例:VectorWrapperBase )を値として格納するがあります。これにより、文字列をさまざまなタイプのベクトルにマップできます。

これは機能しているようです。ただし、memory_map別のクラスのメンバーとしてそのクラスをに格納しようとするとstd::map、コンパイルが失敗します。

最後の行は次のように失敗します:

C ++は初めてなので、これは困惑します。

エラーは、オブジェクトの複製を含むマップ挿入に起因していると思われます。また、オブジェクトは複製できないため、エラーが発生します。AgentMemoryptr_mapVectorWrapper

私の質問は次のとおりです。

  • なぜエラーが発生するのですか?(私の疑いは実際に起こっていることにさえ近いですか?)
  • これに対処するにはどうすればよいですか?

コンパイルエラーに対処するために、私は次のことを検討しましたが、C ++の経験があまりないため、どちらがより適切かを判断できません。

  1. 純粋な指定子(= 0)を削除して、VectorWrapperBase抽象的ではなくなった
    • VectorWrapperBaseインスタンス化されるべきではないため、これはハックのように感じます
  2. VectorWrappersをクローン可能にする
    • これは機能しているようですが、私のユースケースでは、空のコンテナのみがトップレベルマップに割り当てられるため、内部のVectorWrappersをptr_map複製する必要はありません。したがって、クローン可能性はコンパイラーをなだめるためだけにあり、実際の使用法を反映していません。
  3. を忘れて、代わりに ptr_mapとを使用してください。std::mapshared_ptr
    • ベクトルラッパーの存続期間をマップの存続期間にリンクさせたいので、このソリューションにはあまり熱心ではありません。shared_ptrまた、非常にマルチスレッド化されたアプリケーションでの広範な使用による潜在的なオーバーヘッドについても少し心配しています(おそらく不必要にそうですか?) 。
0 投票する
3 に答える
455 参照

c++ - ptr_vector が適切に解放されていない

ptr_vector を使用していくつかのポインターを格納しようとしていますが、メイン メソッドを実行するとすぐにエラーが発生します。これが私のコードです:

これは私が得ているエラーメッセージです:

私は何を間違っていますか?ありがとう!

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

c++ - 挿入前にマップを検索するために lower_bound を使用する利点。ptr_map と同等ですか?

キーが存在しない場合にのみマップに挿入する効率的なアプローチを探しているときに、このアプローチに出くわし ました:

それはうまく機能しstd::mapます。ただし、イテレータの位置を受け入れるものboost::ptr_mapと同様の形式は提供されません。insert()

だから私は疑問に思っています:

  1. 単純な挿入を行う場合と比較して、そのアプローチの利点は何ですか? すなわち

    /li>
  2. 実際にアプローチを使用する正当な理由がlower_boundある場合、同等の戦略はありboost::ptr_mapますか? それとも当てはまりませんか?