On Jun 6, 2012 9:43 PM, "Robert Ramey" <ramey@rrsd.com> wrote:
>
> Brian Budge wrote:
> > Hi all -
> >
> > Is there a way to use custom allocation while loading from an archive?
> > I'm thinking like passing an allocator along with the archive during
> > deserialization?
>
> I'm guessing that this would not be possible without adding a new
> customization point to the library.  Looks like an oversight to me.
>

Any idea how much work something like this might be?

> > Adding to this, is it possible to add a custom deleter to a shared_ptr
> > during deserialization?  I am thinking of using this with boost mpi,
> > and if I send a shared_ptr over the wire with some kind of deleter,
> > the same deleter object can't be used on the other side since it's in
> > a different address space.
>
> I don't think this is true.  The new object is created in the new
> address space.  The object on the "new" side is not the
> same object on the "other" side.

Hmmm.  Maybe the question should have been about how serialization deals with the shared_ptr deleter.  Obviously both the pointer and the deleter will have to exist in the same address space.  I suppose (if allocator passing were allowed) that custom shared_ptr deserialization would be required.

The case I am specifically thinking about is a pool allocator where when the shared_ptr destructor is called, it invokes the deleter on the pointer, returning the object to th pool.  In the MPI case, a unique pool exists on each node.

Thanks.
  Brian