[serialization] understanding of track_always serialization trait
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
"Yan Drugalya"
participants (2)
-
Robert Ramey
-
Yan Drugalya