Re: [Boost-users] Serialization and null pointers
Thanks. If I changed the order of the members being serialized it worked
fine. Weird.
However, I am running into a problem. I am using reference counted Smart
Pointers. If I serialize the reference counter, then when it is loaded it
will likely contain too large of a reference count because there were more
objects referencing the pointer when it was saved than when it was loaded.
However, it works fine it just doesn't properly delete the objects because
the reference count never reaches 0.
If I don't serialize the reference count then the objects try to delete
themselves while boost is loading them from the file. I'm guessing because
of the order everything happens, the final destination isn't increasing the
reference count until after boost already dereferences it.
Any suggestions?
I thought maybe if there was a way to tell if the operation was saving during
the serialize function I could just set the reference count to one, however
that could be erroneous also if the same object being loaded has more than
one smartpointer to the same object.
I'm stumped...
-
Chris
----- Original Message -----
From: "Robert Ramey"
This shouldn't happen.
you might try using an xml_archive so you can better see the output. This will also check that the data saved and data loaded are "in sync". That is that the same data is being saved and loaded.
If all that fails, you'lll have to boil it down to a small example and send it in
Robert Ramey
boost@iyates.com wrote:
Hello,
I have an object graph that is being serialized using a binary archive. It saves to the file fine, however a class member is being serialized is a null pointer.
When I go to open the file, I get an access violation in basic_iarchive.cpp on line 393:
bpis_ptr->load_object_ptr(ar, t, co.file_version);
t is 0x00000000
Is there a way around this? Thank you.
_______________________________________________ Boost-users mailing list Boost-users@lists.boost.org http://lists.boost.org/mailman/listinfo.cgi/boost-users
boost@iyates.com wrote:
Thanks. If I changed the order of the members being serialized it worked fine. Weird.
However, I am running into a problem. I am using reference counted Smart Pointers. If I serialize the reference counter, then when it is loaded it will likely contain too large of a reference count because there were more objects referencing the pointer when it was saved than when it was loaded. However, it works fine it just doesn't properly delete the objects because the reference count never reaches 0.
If I don't serialize the reference count then the objects try to delete themselves while boost is loading them from the file. I'm guessing because of the order everything happens, the final destination isn't increasing the reference count until after boost already dereferences it.
Any suggestions?
I'm not sure which reference counted Smart Pointer you're using. If you use the boost smart_ptr, its already has serializaiton done. If you want to add serialization to your own Smart Pointer, you can look at how it was done for the boost smart pointer - now there are two versions so you have lots of ideas available. Robert Ramey
participants (2)
-
boost@iyates.com
-
Robert Ramey