Hi Martin, If class A from the example is replaced by char, how should this situation be handled? Code follows at the end. Thanks, Ivan template <typename T> struct DynamicArray { int Size; T* Element; friend class boost::serialization::access; template<class Archive> void save(Archive & ar, const unsigned int version) const { ar & Size; for (int i = 0; i < Size; ++i) ar & Element[i]; } template<class Archive> void load(Archive & ar, const unsigned int version) { ar & Size; assert(Size >=0); if (Size > 0) { Element = new T[Size]; for (int i = 0; i < Size; ++i) ar & Element[i]; } } BOOST_SERIALIZATION_SPLIT_MEMBER() }; int main(int argc, char* argv[]) { DynamicArray<char> ArrayOfAs, ArrayOfAs2; ArrayOfAs.Element = new char[5]; ArrayOfAs.Size = 5; char* secondElement = &ArrayOfAs.Element[1]; char* secondElement2; std::stringstream stream; { boost::archive::text_oarchive oa(stream); oa & ArrayOfAs; oa & secondElement; } { boost::archive::text_iarchive ia(stream); ia & ArrayOfAs2; ia & secondElement2; } assert(secondElement2 == &ArrayOfAs2.Element[1]); delete [] ArrayOfAs.Element; delete [] ArrayOfAs2.Element; }