|
Boost Users : |
From: Robert Ramey (ramey_at_[hidden])
Date: 2007-08-13 12:24:46
if you want to suppress object tracking for a particular class
BOOST_CLASS_TRACKING(SomeStruct, boost::serialization::track_never)
as described in the manual Reference/Special Considerations/Object
Tracking.
Of course you must realized that if you do this and you serialize pointers
you're
exposed to the risk that when you load the archive multiple pointers to
a unique object you're not going to the same thing when you load it. Your
going to get each pointer pointing to a different (and new object).
Robert Ramey
gast128 wrote:
> Dear all,
>
> I was trying to use the Boost Serialization library again, but I ran
> into a problem which cost me a full day. The Boost Serialization
> library is a very handy library, but often when I use it I run into
> problems which cost me days.
>
> This time I try to serialize just 'track_never' objects. First of all
> the compiler firewall which is built in the library does not work
> when using the nvp macro:
>
> void Foo()
> {
> boost::archive::xml_oarchive oa(...)
>
const SomeStruct s; // const described in rationale
> oa << s; // compile time error
> oa << BOOST_SERIALIZATION_NVP(s); //ok
> }
>
> But this wasn't the real problem. I was looping to serialize non
> tracking objects:
>
> void Bla()
> {
> boost::archive::xml_oarchive oa(...)
>
> for (int i = 0; i < 1000; ++i)
> {
> const SomeStruct s;
> oa << s;
> }
> }
>
> However the library did track them by pointer due to a previous
> request to serialize a pointer. It decides this on a call
> to 'basic_serializer::serialized_as_pointer' deep in the library.
>
> struct SomeStructHolder
> {
> SomeStructHolder() : m_p(NULL){}
>
> template <class Archive>
> void serialize(Archive& ar, const unsigned int /*version*/)
> {
> ar & BOOST_SERIALIZATION_NVP(m_p);
> }
>
> const SomeStruct* m_p;
> };
>
> somewhere else:
>
> void Bla()
> {
> boost::archive::xml_oarchive oa(...)
>
> const SomeStructHolder holder;
> oa << holder;
> }
>
> So this is again an unexpected property of the library. Maybe the
> ambition for automatic object tracking is too high, and specify it
> explicitly per class / per archiving operation would be more work for
> the user, but also clearer.
>
> And still the original problem was too find out if Boost
> Serialization could also be used on a per demand loading of
> (value-)objects: in my problem the final storage can be potential
> bigger than computer memory, so I was wondering if objects could be
> loaded on demand (instead of all in once).
>
> wkr,
> me
Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net