This issue has
already been discussed but was never addressed :
I don't understand
why objects loaded as pointer can't be relocated :
- These objects are
stored in basic_iarchive_impl::object_id_vector as the others, so, technically
speaking, we can change their "address"
- There is
situations where it is mandatory : for example when data, sharing some objects,
are serialized / dispatched in separate archives
=> without
relocating
service at loading, sharing of object is not possible.
For the moment, I
workaround the limitation with a hack in the method
basic_iarchive_impl::reset_object_address :
I remove the
"safeguard" which checks that the method is applied on a tracked object and
immediately after
the concerned object
is read :
================================================
for(i =
moveable_objects_recent; i < moveable_objects_end; ++i){
if(old_address == object_id_vector[i].address)
break;
}
for(; i < moveable_objects_end; ++i){
================================================
is replaced
by
=================================================
for(i = 0; i
< object_id_vector.size();
++i){
=================================================
I think
that the limit can be properly removed by handling in
"basic_iarchive_impl::load_pointer" the "moveable_objects_..." variables
as it is done in
"basic_iarchive_impl::load_object"
As objects created
by the serialization system are marked with "loaded_as_pointer" = true
(this data is used
by basic_iarchive_impl::delete_created_pointers) I think
this data should be set to false by
"reset_object_address".
Is there other
implication ?
Alain.