Or...

If you're not interested in a general streaming system, as long as your objects can save/load themselves to a stream (memory, file or whatever) then you should still be able to do what you want to do. If you have Load/Load/Assign virtual methods and each derived class also calls the inherited Save/Load methods, it still should be able to work.

Inside Assign, have the object save itself to the stream, then have the object that you wish to be assigned, call it's load method, passing in the saved stream pointer and it will be duplicated.