467,926 Members | 1,512 Online
Bytes | Developer Community
New Post

Home Posts Topics Members FAQ

Post your question to a community of 467,926 developers. It's quick & easy.

boost serialization problem with reference members

I have been trying out boost's serialization library for the past few
days. And I have come across a problem serializing a class that has a
reference member. The code is posted as below:

#include <iostream>
#include <fstream>
#include <string>

#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>

//for name value pairs when doing XML archiving
#include <boost/serialization/nvp.hpp>

class MyClassWithNoDefaultConstructor;
std::ostream& operator<<(std::ostream& os, const
MyClassWithNoDefaultConstructor& object);

//global integer variable... whose reference will be a member of
int global_int = 10;

class MyClassWithNoDefaultConstructor
MyClassWithNoDefaultConstructor(int i, int& ref_)
: intMember(i), ref(ref_)
int intMember;
int& ref;
template<class Archive>
void serialize(Archive& ar, const unsigned int version)
friend class boost::serialization::access;
friend std::ostream& operator<<(std::ostream& os, const
MyClassWithNoDefaultConstructor& object);

std::ostream& operator<<(std::ostream& os, const
MyClassWithNoDefaultConstructor& object)
os << "\nMyClassWithNoDefaultConstructor contents:\n";
os << "intMember - " << object.intMember << "\n";
os << "ref - " << object.ref << "\n";
return os;

namespace boost
namespace serialization
template<class Archive>
inline void save_construct_data(Archive & ar, const
MyClassWithNoDefaultConstructor* t, const unsigned int file_version)
// save data required to construct instance
ar << t->intMember;
ar << &(t->ref);

template<class Archive>
inline void load_construct_data(Archive & ar,
MyClassWithNoDefaultConstructor* t, const unsigned int file_version)
// retrieve data from archive required to construct new instance
int m;
//int * ptr;
int * ptr = new int();
ar >m;
ar >ptr;
::new(t)MyClassWithNoDefaultConstructor(m, *ptr);

void SerializeMyClassWithNoDefaultConstructor(const std::string&
MyClassWithNoDefaultConstructor object(111, global_int);
std::ofstream ofs(filename.c_str());
boost::archive::xml_oarchive xml_oa(ofs);
xml_oa << BOOST_SERIALIZATION_NVP(object);

void DeserializeMyClassWithNoDefaultConstructor(const std::string&
char * buffer = new char[sizeof(MyClassWithNoDefaultConstructor)];
MyClassWithNoDefaultConstructor* ptr =
reinterpret_cast<MyClassWithNoDefaultConstructor*> (buffer);
std::ifstream ifs(filename.c_str());
std::cout << "inside deserialize()" << std::endl;
boost::archive::xml_iarchive xml_ia(ifs);
std::cout << "xml_iarchive constructed" << std::endl;
std::cout << "deserialized" << std::endl;
std::cout << *ptr;
delete[] buffer;
buffer=NULL; ptr=NULL;

int main()
const std::string filenameMyClassWithNoDefaultConstructor="/tmp/

SerializeMyClassWithNoDefaultConstructor(filenameM yClassWithNoDefaultConstructor);

DeserializeMyClassWithNoDefaultConstructor(filenam eMyClassWithNoDefaultConstructor);
catch(const boost::archive::archive_exception& ex)
std::cout << ex.what() << "\n";
catch(const std::exception& ex)
std::cout << ex.what() << "\n";
return 0;

It compiles fine with g++ 3.4.6. But fails with a segmentation fault.
I tried fiddling around with it but the best I can do is cause it to
fail with a bus error or a stream error. Here is the documentation
that I am referring to - http://www.boost.org/libs/serialization/doc/index.html.
For reference members, the specific documentation page is -

The code works (or atleast it seems to) if you remove the reference
member. That is, I have it working for classes that don't have a
default constructor but what if there are constant or reference
members? The documentation seems to suggest it is possible to handle
them as are non-default constructor classes are, but I am not able to
get it to work.

Am I doing something silly there? Or is there a major gap between my
understanding and what the documentation says? I am using boost 1.32 -
can that be a reason? Can anyone help with the problem?

Feb 21 '07 #1
  • viewed: 1856

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Jim Campbell | last post: by
2 posts views Thread by eyal.susser | last post: by
3 posts views Thread by BravesCharm | last post: by
3 posts views Thread by Ben | last post: by
23 posts views Thread by sidney | last post: by
2 posts views Thread by smith4894 | last post: by
reply views Thread by Abhishek Padmanabh | last post: by
1 post views Thread by MindWrapper | last post: by
By using this site, you agree to our Privacy Policy and Terms of Use.