|  | Home | Libraries | People | FAQ | More | 
Boost.Intrusive hooks can be configured to operate in safe-link mode. The safe mode is activated by default, but it can be also explicitly activated:
//Configuring the safe mode explicitly class Foo : public list_base_hook< link_mode<safe_link> > {};
With the safe mode the user can detect if the object is actually inserted in a container without any external reference. Let's review the basic features of the safe mode:
        With these features, without any external reference the user can know if
        the object has been inserted in a container by calling the is_linked()
        member function. If the object is not actually inserted in a container, the
        hook is in the default state, and if it is inserted in a container, the hook
        is not in the default state.
      
        By default, all safe-mode assertions raised by Boost-Intrusive
        hooks and containers in are implemented using BOOST_ASSERT,
        which can be configured by the user. See http://www.boost.org/libs/utility/assert.html
        for more information about BOOST_ASSERT.
      
        BOOST_ASSERT is globally
        configured, so the user might want to redefine intrusive safe-mode assertions
        without modifying the global BOOST_ASSERT.
        This can be achieved redefining the following macros:
      
BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT:
            This assertion will be used in insertion functions of the intrusive containers
            to check that the hook of the value to be inserted is default constructed.
          BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT:
            This assertion will be used in hooks' destructors to check that the hook
            is in a default state.
          
        If any of these macros is not redefined, the assertion will default to BOOST_ASSERT. If BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT
        or BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT
        is defined and the programmer needs to include a file to configure that assertion,
        it can define BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT_INCLUDE
        or BOOST_INTRUSIVE_SAFE_HOOK_DEFAULT_ASSERT_INCLUDE
        with the name of the file to include:
      
#define BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT MYASSERT #define BOOST_INTRUSIVE_SAFE_HOOK_DESTRUCTOR_ASSERT_INCLUDE <myassert.h>