$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Robert Ramey (ramey_at_[hidden])
Date: 2004-01-21 12:42:40
Vladimir Prus wrote:
>I've just spend about an hour with a colleague looking for a very subtle
>problem with serialization and BOOST_CLASS_EXPORT.
>What we were trying to do is to have some code which reads pointers to base
>class and does something with it. On the saving side, we've got several
>functions which store various derived classes.
>Now the example:
> class B { ... } ;
> class D { ... } ;
> BOOST_CLASS_EXPORT(D);
> D* d = new D;
> oa << d;
>Looks innocent, but it does not store the name of derived class that is
>stored. So, after loading with
> B* b;
> is >> b;
>you get object of type B, not D. I attach the program which reproduces this
>problem.
>The gotcha is that if you write
> B* d = new D;
> oa << d;
>everything works. But it's nonintuitive, and the mistake is very easy to make
>and very hard to notice! In my case, one function was intended for saving
>specific derived type, so it naturally declared a pointer of that type, and
>it took an hour to debug the problem.
Only an hour?
>Is it possible to always save proper identification when saving a pointer to
>polymorphic objects?
This looks like an error to me. The intention is that it work as you expected.
I'll look into it.
Robert Ramey