2

ブースト侵入コンテナに興味があり、テストしたいと思いました。私は基本的に、「Boost.Intrusive の使用方法」の章で、boost.org の例をコピーして貼り付けました。したがって、私のコードは次のようになります。

#include <iostream>
#include <boost/intrusive/list.hpp>

using namespace boost::intrusive;

struct test_tag1;
struct test_tag2;

typedef list_base_hook< tag<test_tag1> > BaseHook;
typedef list_base_hook< tag<test_tag2> > BaseHook2;

class TestClass : public BaseHook, public BaseHook2 {
    public:
        int test_var;
};

typedef list< TestClass, base_hook<BaseHook> > class_list;
typedef list< TestClass, base_hook<BaseHook2> > class_list2;

int main() {
    class_list list;

    TestClass class1 = TestClass();
    list.push_back(class1);

    bool is_the_same = (&list.front() == &class1);
    std::cout << is_the_same;

    return 0;    
}

正常にコンパイルされますが、実行時に次のエラーが発生し続けます。

1Assertion failed: !hook.is_linked(), file boost/intrusive/detail/generic_hook.hpp, line 47

このエラーの原因を確認するために generic_hook.hpp を開きました。アサートの説明は次のとおりです。

void destructor_impl(Hook &hook, detail::link_dispatch<safe_link>)
{  //If this assertion raises, you might have destroyed an object
   //while it was still inserted in a container that is alive.
   //If so, remove the object from the container before destroying it.
   (void)hook; BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT(!hook.is_linked());
}

しかし、それは真実ではありません。少なくとも、どこでオブジェクトを誤って破壊した可能性があるのか​​ わかりません. これらのコンテナの詳細はまだわかっていないので、ここで助けていただければ幸いです。

4

1 に答える 1