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