|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2001-05-26 09:05:58
From: <williamkempf_at_[hidden]>
> > OK. Do you agree that it is a real problem? How would you solve it?
> (I mean
> > the problem with serializing a shared_ptr.)
>
> Using the same techniques I'd use if raw pointers were being used
> instead.
Raw pointers can't be serialized in the general case. You don't know whether
the pointer owns the object.
> Seriously, the example given is a very non-trivial example
> and knowing if an object has been previously serialized is not going
> to be enough info to persist the containing object any way.
It's enough info for me:
int last_id = 0;
std::map<shared_ptr_id, int> m;
void write(Storage & s, shared_ptr<T> const & p)
{
std::map<shared_ptr_id, int>::iterator i = m.find(p.id());
if(i != m.end())
{
write(s, i->second);
}
else
{
m[p.id()] = last;
write(s, last);
++last;
// use typeid(*p) to find the appropriate serialization function
// serialize *p
}
}
-- Peter Dimov Multi Media Ltd.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk