問題タブ [boost-intrusive]
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++ - 侵入型ハッシュテーブルのブースト
Boost Intrusive Hashtable を使用する方法の簡単な例を誰か提供できますか? 私はそれを実装しようとしましたが、ほとんど運がありません。
私はこれまでのところこれを持っています
しかし、何らかの理由で、このように上で定義されているハッシュ関数を呼び出していません
何らかの理由で、hash_value 関数が呼び出されません。これに関する助けがあれば大歓迎です!
boost - how to detach elements from a boost::intrusive set container
I am trying to detach elements from a boost::intrusive set and getting a assertion failure. when i delete the element after detaching it from the container.
The class derives from set_base_hook.
class fileXfer : public set_base_hook > 70 {
I am using "erase" function to detach the object from the container. when i try to delete the object i get assertion failure. The assertion failure is happening below at the following location.
/usr/local/include/boost/intrusive/detail/utilities.hpp:344: void boost::intrusive::detail::destructor_impl(Hook&, boost::intrusive::detail::link_dispatch<(boost::intrusive::link_mode_type)1u>) [with Hook = boost::intrusive::detail::generic_hook, boost::intrusive::default_tag, (boost::intrusive::link_mode_type)1u, 3>]: Assertion `!hook.is_linked()' failed. Aborted (core dumped)
when i looked at the location of the error i saw this command.
341 { //If this assertion raises, you might have destroyed an object 342 //while it was still inserted in a container that is alive. 343 //If so, remove the object from the container before destroying it. 344 (void)hook; BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT(!hook.is_linked()); 345 }
pls advise
c++ - より多くのboost::intrusiveコンテナの1つの要素に関する混乱
boost::intrusive
ドキュメントに記載されているパフォーマンスとメモリ使用量の保証を維持しながら、同じ要素が異なる侵入型コンテナーに表示される可能性があることをよく理解していません。
ドキュメントには次のように記載されています。
侵入型コンテナは、渡されたオブジェクトのコピーを保存しませんが、オブジェクト自体を保存します。オブジェクトをコンテナーに挿入するために必要な追加データは、オブジェクト自体によって提供される必要があります。たとえば
MyClass
、リンクされたリストを実装する侵入型コンテナーに挿入するにMyClass
は、必要な次および前のポインターを含める必要があります。
STL と boost::intrusive コンテナーの違いに下線を引くと、ドキュメントには次のようにも記載されています。
非侵入型コンテナにはいくつかの制限があります。
オブジェクトは 1 つのコンテナーにのみ属することができます。2 つのコンテナー間でオブジェクトを共有する場合は、それらのオブジェクトの複数のコピーを格納するか、ポインターのコンテナーを使用する必要があります
std::list<Object*>
。
理にかなっています。要素を 2 つstd::list
の s にすることはできません。わかった。MyClass
しかし、タイプの 1 つのインスタンスを2 つの異なる に挿入するにはどうすればよいでしょうかboost::intrusive::list
。たとえば、そのような要素は次の要素へのポインターを 1 つしか持てず、前の要素へのポインターを 1 つしか持つことができないとします。私が間違っていなければ、これは、あるコンテナーを変更すると他のコンテナーも変更される可能性があると想定している場合にのみ機能し、その逆も同様です。
c++ - C++で2つのブースト侵入セットをマージしますか?
一緒にマージする必要がある 2 つのブースト侵入セットがあります。押し付けがましいセットをブーストmap_old.m_old_attributes
するためにマージする必要がある押し付けがましいセットがありますm_map_new_attributes
これを行う最善の方法は何ですか?マージを実行できる関数が見つかりませんか? 最近、boost intrusive セットの使用を開始しましたが、マージを実行できる定義済みのメソッドを見つけることができませんでしたか、それとも間違っているのでしょうか?
c++ - C++でboost::intrusive_ptrを使用するときにメモリを解放する方法は?
次のように boost::intrusive_ptr を使用します。
このコードを正しく理解していれば、MyObject に割り当てられたメモリを解放していないため、メモリ リークが発生します。メモリリークを避けるために解放するにはどうすればよいですか?
c++ - 押し付けがましいポインタ
ブーストの侵入ポインターについて少し混乱しています。定義は次のように述べています。
「すべての新しい
intrusive_ptr
インスタンスは、関数への非修飾呼び出しを使用して参照カウントをインクリメントしintrusive_ptr_add_ref
、ポインターを引数として渡します。同様に、intrusive_ptr
が破棄されると、が呼び出されますintrusive_ptr_release
。この関数は、参照カウントがゼロになったときにオブジェクトを破棄する責任があります。 . ユーザーは、これら 2 つの関数の適切な定義を提供することが期待されます。"
これは、これらのメソッドを実装する必要があるということですか、それとも実行できるということですか? ポイントは、関数が侵入ポインターを必要とするため、これを使用しているということです。他の場所では共有ポインターを使用していたので、ポインターが管理されているかどうかだけが心配で、ポインターへの参照がなくなったら削除されます。
c++ - Boost Intrusive unordered_set 静的メンバー関数が間違ったサイズ タイプを返す
正常にコンパイルされる次のコードを検討してください。
ドキュメントとコードの両方で、suggested_upper_bucket_count()
は次のように宣言されています。
では、どうしてMap::size_type
4 バイト ( uint32_t
) なのに、 の結果suggested_upper_bucket_count()
が 8 バイトになるのでしょうか?
ライブでご覧ください: https://godbolt.org/g/3Sz8Xj