|
Boost : |
From: Peter Dimov (pdimov_at_[hidden])
Date: 2005-04-09 03:53:01
Robert Ramey wrote:
>> I've found an implementation of shared pointer serialization that
>> martin ecker sent me some time ago. It seems to me that it is
>> simple transparent and would satisfy all requirements.
Depends on whether your requirements include serializations of shared_ptr<X>
for different X'es sharing ownership.
template<class Archive, class T>
inline void load(
Archive & ar,
boost::shared_ptr<T> &t,
const unsigned int /* file_version */
){
T* r;
ar >> boost::serialization::make_nvp("px", r);
t = ar.get_shared_ptr_registry().lookup(r);
lookup(r) probably returns a shared_ptr<T> for the assignment to work...
This probably means that there are separate map< T*, shared_ptr<T> >
registries for each T.
if (!t)
{
t.reset(r);
ar.get_shared_ptr_registry().register_shared_ptr(t);
}
}
This approach covers most of the real-world cases, so it's definitely better
than the status quo. Go for it.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk