I've tried to searched for this in the archive and in google, but I can't seem to find the answer. I'm having trouble using boost::serialization with its non-intrusive. In parituclar, I can't really figure out how to serialize derived classes that do not have default constructors in an non-intrusive way. class A; class B : A; class C : A; Suppose B and C do not have a default constructor. And I would like to serialize: A* b = new B(10); A* c = new C("something"); Due to the restriction of the API that I can not change, all I have is the pointer to A. I'm puzzled on how this can be done. From reading the documentation and source code, I think I need to override the load_construct_data and save_construct_data, such as: template<class Archive> inline void load_construct_data(Archive &ar, A *t, const unsigned int vers) { } template<class Archive> inline void save_construct_data(Archive &ar, A *t, const unsigned int vers) { } However, it seems like the memory is allocated already by the archiver with the size of type A before calling the load_construct_data. How then can I allcoate an object with type B or C? There are examples on how this can be done intrusively, but since I don't have control of the source, I really want to do it non-intrusively. Any help is greatly appreciated. Will