"Malte Clasen"
Hi,
the serialization docs about shared_ptr state that you have to call void_cast_register to use shared_ptr:
In this case the document refers to the implementation of shared_ptr rather than programs that use it.
---------- This indicates that we're not quite done. [...] In this case we need only the latter function so we can replace the base object serialization with:
// register the relationship between each derived class // its polymorphic base void_cast_register< boost::detail::sp_counted_base, boost::detail::sp_counted_base_impl
();
(http://boost.org/libs/serialization/doc/shared_ptr.html)
There are two issues with this:
a) The actual void_cast_register declaration has its parameters in the reverse order:
---------- template
inline BOOST_DLLEXPORT const void * void_cast_register( const Derived * /* dnull = NULL */, const Base * /* bnull = NULL */ ) BOOST_USED; ---------- (void_cast.hpp)
Good call, I've corrected the document for the above.
b) It doesn't seem to work either way, although there are different exceptions in both cases. The demo_shared_ptr.cpp doesn't even call it, instead the following is used:
---------- oa.register_type( static_cast< boost::detail::sp_counted_base_impl< B *, boost::checked_deleter<B> > * >(NULL) ---------- (demo_shared_ptr.cpp)
This one actually works, the use counter is properly updated. So I guess the documentation is outdated, isn't it?
In this case the document refers to the implementation of shared_ptr rather than programs that use it. So I think ths part is ok. Robert Ramey
Malte