$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Russell Hind (rh_gmane_at_[hidden])
Date: 2004-11-20 01:05:27
Robert Ramey wrote:
>
> the de-serialization of a vector is somethng like:
>
> template<class Archive, class T>
> void load(Archive ar, vector<T> & v){
> unsigned int count;
> ar >> count;
> v.clear();
> while(--count){
> T t;
> ar >> t;
> v.push_back(t)
> }
> }
>
>>From my reading of the weak_ptr document, a weak_ptr cannot point to
> anything if there is no existent correspnding shared pointer. So the above
> would necessarily fail unless a shared_ptr was previously serialized in the
> same archive - which is not guarenteed. In order to use such a data
> structure, the default implementation of the serialization of vector would
> have to be overriden.
From a users's point of view, how I'd expect/like this to work is that
if a weak pointer is serialized first, then the actual shared object is
serialized. On the way back in (loading) the weak pointer can be read
and will point to a valid shared object *until* the archive is closed.
At that point, if the user doesn't have a shared_ptr to the object, then
the object is deleted but up until then, the weak_ptr is valid.
Yes it is ultimately a user error to serialize *only* a weak pointer,
but I don't believe it should be a user error to serialize a weak_ptr
before a shared_ptr. IMHO, the library should keep the object alive
(i.e. hold a shared_ptr to any de-serialized pointers, shared or weak)
until the archive is closed.
But I haven't really looked at the implementation of shared_ptr and
serialization, so this is just how I'd 'expect' it to work
Cheers
Russell