問題タブ [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.
c++ - 「リリース」時に ptr_container リークを促進しますか?
から解放されたオブジェクトは、ptr_set
手動で削除しないとリークされると想定しています。ただし、以下のテスト プログラムでは、valgrind での 2 つのリーク (9/13 行目から) のみが示され、12 行目ではリークはありませrelease
んptr_container
。
出力:
c++ - std::unique_ptrとboost::ptr_containerを含むstlコンテナ
c ++ 11があるので、c++11のboost::ptr_containersの代わりがあるかどうか自問していました。たとえば、を使用できることはわかっていますstd::vector<std::unique_ptr<T> >
が、これが完全な代替品であるかどうかはわかりません。これらのケースを処理するための推奨される方法は何ですか?
c++ - boost::ptr_list で前方宣言されたクラス
小さな科学プロジェクトのために、シミュレートされたすべてのオブジェクトを ptr_list に保持する Simulation クラスをセットアップしました。すべてのパーティクルにすばやくアクセスする必要があるため、追加の ptr_list を追加しました。前方宣言されたクラスが好きではないため、ブーストは不平を言うようになりました。recursive_wrapper
すでに指摘されていましたが、ptr_list< recursive_wrapper<Particle> >
どちらもうまくいかないようです。
c++ - boost :: ptr_map <>および_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)アサーションの失敗
stackoverflowに関する最初の質問は、この問題について助けを得ることを望んでいました。次のEffectManagerクラスを見ると、Effectmanagerインスタンスの割り当てが解除されると、_BLOCK_TYPE_IS_VALID(pHead-> nBlockUse)でアサーションエラーが発生します。
エフェクトマップのメモリを解放しようとすることと関係があります。マップにエフェクトを挿入しない場合、この問題は発生しません。
ベースSTLマップを使用する場合も、正常に機能します。
c++ - boost::ptr_vector コンストラクター
現在のプロジェクトでを使用しようとしてboost::ptr_vector
いますが、push_back() メソッドでパラメーター化されたコンストラクターを使用できるかどうか、またはデフォルトのコンストラクターを使用する必要があるかどうか疑問に思っていましたか?
二次的な質問として、定義した場合でもデフォルトのコンストラクターを使用しますか?
これは最良のフォローアップではないかもしれませんが、私が見た実装のほとんどは、メソッドが演算子を取るboost::ptr_vector
ことを示しています。オブジェクトを作成し、そのオブジェクトへのポインタをコンテナのメソッドに渡すことはできますか?push_back()
new
push_back()
c++ - オブジェクトを部分的にソートする高速な方法
私は一連のオブジェクト (約 20) を定義するルーチンを持っていJet
ます<
。それらがソートされた後、私は最も低い2つを取ります。これを行うための迅速な方法は何ですか?これまでに考えたオプション:
boost::ptr_vector<Jet>
組み込みの を使用し.sort()
、最初の 2 つを取得し、boost::ptr_list<Jet>
、使用.sort()
、最初の 2 つを取る- 上記のようにリストを使用しますが、ソートするのではなく、 を使用
max_element
して要素を削除し、再度実行します。
次の理由から、使用std::vector<Jet>
が最悪のオプションになると思います。ランダムアクセスは必要ありません。ソートはオブジェクトをメモリ内で移動します。を呼び出したときにオブジェクトがコピーされますpush_back(Jet)
。std::list<Jet>
コピーが必要なため、 anは よりも悪いと思いboost::ptr_list<Jet>
ます。max_element
さらに、リスト全体をソートするよりも 2 回取得する方が高速であると想定します。
私の論理は健全ですか?パフォーマンスの違いは重要ですか?私が考えていない他のオプションはありますか?
c++ - アロケーターのクローン作成と、boost::ptr_container でのポリモーフィズム
私の現在のプロジェクトでは、ポリモーフィックboost::ptr_vector
に保持するために を使用していますが、Objects
VS2010 ビルドの 1 つが を複製できないとスローするまで、すべて正常に機能していobject
ましたnew_clone()
。c++ FAQはそれを作成しましboost
たが、現在、VS2010 は、抽象クラスでクローンを使用できないと言って、この shanagin を私に投げかけています。pure virtual
これは、boost でクローンを作成できるようにするには、抽象基本クラスを破棄する必要があるということですか?
ノート:
- 抽象基本クラスのオブジェクトがプログラムに存在することは決してありませんが、ほとんどすべてがそのように扱われます。
- クローンメソッドを非仮想にし、実際に何かを返す手段を与えると(コンストラクター/コピーコンストラクターを提供します。これは、設計に反する存在する可能性があることを意味します)、コンパイラーは、すべての派生クラスにデフォルトのコンストラクタ。それらを持たないのは設計によるものです。
編集:私は実装していませんdelete_clone()
(それが明示的に必要であることに気づいていなかったので、デストラクタはうまくいくと思います)
c++ - 抽象基本クラスのptr_mapを含むマッピングオブジェクト
boost::ptr_map
抽象基本クラス(例:VectorWrapperBase )を値として格納するがあります。これにより、文字列をさまざまなタイプのベクトルにマップできます。
これは機能しているようです。ただし、memory_map
別のクラスのメンバーとしてそのクラスをに格納しようとするとstd::map
、コンパイルが失敗します。
最後の行は次のように失敗します:
C ++は初めてなので、これは困惑します。
エラーは、オブジェクトの複製を含むマップ挿入に起因していると思われます。また、オブジェクトは複製できないため、エラーが発生します。AgentMemory
ptr_map
VectorWrapper
私の質問は次のとおりです。
- なぜエラーが発生するのですか?(私の疑いは実際に起こっていることにさえ近いですか?)
- これに対処するにはどうすればよいですか?
コンパイルエラーに対処するために、私は次のことを検討しましたが、C ++の経験があまりないため、どちらがより適切かを判断できません。
- 純粋な指定子(
= 0
)を削除して、VectorWrapperBase
抽象的ではなくなったVectorWrapperBase
インスタンス化されるべきではないため、これはハックのように感じます
- VectorWrappersをクローン可能にする
- これは機能しているようですが、私のユースケースでは、空のコンテナのみがトップレベルマップに割り当てられるため、内部のVectorWrappersを
ptr_map
複製する必要はありません。したがって、クローン可能性はコンパイラーをなだめるためだけにあり、実際の使用法を反映していません。
- これは機能しているようですが、私のユースケースでは、空のコンテナのみがトップレベルマップに割り当てられるため、内部のVectorWrappersを
- を忘れて、代わりに
ptr_map
とを使用してください。std::map
shared_ptr
- ベクトルラッパーの存続期間をマップの存続期間にリンクさせたいので、このソリューションにはあまり熱心ではありません。
shared_ptr
また、非常にマルチスレッド化されたアプリケーションでの広範な使用による潜在的なオーバーヘッドについても少し心配しています(おそらく不必要にそうですか?) 。
- ベクトルラッパーの存続期間をマップの存続期間にリンクさせたいので、このソリューションにはあまり熱心ではありません。
c++ - ptr_vector が適切に解放されていない
ptr_vector を使用していくつかのポインターを格納しようとしていますが、メイン メソッドを実行するとすぐにエラーが発生します。これが私のコードです:
これは私が得ているエラーメッセージです:
私は何を間違っていますか?ありがとう!
c++ - 挿入前にマップを検索するために lower_bound を使用する利点。ptr_map と同等ですか?
キーが存在しない場合にのみマップに挿入する効率的なアプローチを探しているときに、このアプローチに出くわし ました:
それはうまく機能しstd::map
ます。ただし、イテレータの位置を受け入れるものboost::ptr_map
と同様の形式は提供されません。insert()
だから私は疑問に思っています:
単純な挿入を行う場合と比較して、そのアプローチの利点は何ですか? すなわち
/li>実際にアプローチを使用する正当な理由が
lower_bound
ある場合、同等の戦略はありboost::ptr_map
ますか? それとも当てはまりませんか?