
Vladimir Prus <ghost@cs.msu.su> writes:
If you serializing object graphs, then you either:
1. Always store an object by pointer 2. Save it by value first time, and by pointer other times.
Both situations are easy to detect. But another situation is when object with the same address is saved several times by value. In that case, it's very reasonable to do no tracking at all.
Yes, that's a reasonable option; I think it's what Peter has been advocating.
Implementing should be easy. For each stored pointer it's necessary to keep a flag, telling if:
- there was one save by value - there were several saved by value - there were save by pointer.
The logic is.
- Save by value - if there were saves by pointer, throw pointer_conflict - if there were (several) saves by value, save the data, change flag to "several saves by value"
- Save by pointer - if there were save by value, store id of previously saved object, change flag to "save by pointer" - if there were several saves by value, throw something
I'm sure you mean assert something, right? ;-)
- if there were save by pointer, store id of previously saved object
I can't find anything wrong with above logic. Of course, I might be missing something too.
It's certainly reasonable and predictable. Since the library can know when it is dealing with a reference member and when it is dealing with a value member, if reference members are just saved by pointer, it all holds together. -- Dave Abrahams Boost Consulting www.boost-consulting.com