My current copy the code includes in the file iserializer.hpp (line # 291)
the following code. Doesn't this address the situation?
Robert Ramey
template
BOOST_DLLEXPORT void pointer_iserializer::load_object_ptr(
basic_iarchive & ar,
void * & x,
const unsigned int file_version
) const
{
Archive & ar_impl = boost::smart_cast_reference(ar);
auto_ptr_with_deleter<T> ap(heap_allocator<T>::invoke());
if(NULL == ap.get())
boost::throw_exception(std::bad_alloc()) ;
T * t = ap.get();
x = t;
// catch exception during load_construct_data so that we don't
// automatically delete the t which is most likely not fully
// constructed
BOOST_TRY {
// this addresses an obscure situtation that occurs when
// load_constructor de-serializes something through a pointer.
ar.next_object_pointer(t);
boost::serialization::load_construct_data_adl(
ar_impl,
t,
file_version
);
}
BOOST_CATCH(...){
ap.release();
BOOST_RETHROW;
}
BOOST_CATCH_END
ar_impl >> boost::serialization::make_nvp(NULL, * t);
ap.release();
}
Johan Råde wrote:
Robert Ramey wrote:
Johan Råde wrote:
Maybe you could offer me a fix for the bug that makes the
serialization library crash
when you throw an exception in a load_construct_data function ;-)
LOL - hmmm - I think I looked into this but I don't remember what
I did with it. Send me a link to the original complaint and I'll
check again.
Robert Ramey
The original complaint was in a private e-mail that I sent you 2 1/2
years ago.
I don't think I will be able to find it.
The sender was rade@maths.lth.se.
If you don't have the mail, I'd be happy to send you a short example
that reproduces the bug.
--Johan Råde