Boost logo

Boost Users :

From: Yan Drugalya (ydrugalya_at_[hidden])
Date: 2007-12-24 08:01:48


Folks ,

I feel a lack of understanding what actually track_always trait does. I
expect that boost does not allow me to save/load twice object with the same
address?

But it reports BOOST_STATIC_ASSERT even in following case:

Question 1

Class A

{

// serialization support

};

BOOST_CLASS_TRACKING (A, track_always)

BOOST_CLASS_EXPORT( A)

 …

A* a = new A;

oa << a ;

  assert in oserializer.hpp

 // if your program traps here, it indicates taht your doing one of the
following:

// a) serializing an object of a type marked "track_never" through a
pointer.

// b) saving an non-const object of a type not markd "track_never)

// Either of these conditions may be an indicator of an error usage of the

    // serialization library and should be double checked. See
documentation on

    // object tracking.

Qurstion 2

Above code with using of xml_oarchive compliles and works:

oa << BOOST_SERIALIZATION_NVP(a);

oa << BOOST_SERIALIZATION_NVP(a);

I expect that it should raise above BOOST_STATIC_ASSERT because I trying to
store the same object twice?

Question 3

Also I can't understand how track_always serialization trait works in case
of Diamond inheritance

Quataion from documentation

"In a diamond hesitance structure with a virtual base class, object tracking
will prevent redundant save/load invocations"

How boost knows that this is virtual base class and prevents redundant
save/load invocations?

Please help me to find the way to understanding of object tracking trait :)
Thank you



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