Boost logo

Boost :

Subject: Re: [boost] make_shared and allocate_shared for classes with privateconstructors
From: Peter Dimov (pdimov_at_[hidden])
Date: 2008-11-04 17:33:41


Michael Marcin:
> I have some classes that derive from enable_shared_from_this which I've
> given private constructors and static creation methods which return a
> shared_ptr. This prevents someone from using the class inappropriately. It
> seems obvious that at a minimum using make_shared internally here would be
> an improvement. Unfortunately this requires that make_shared be > made a
> friend for every arity and probably won't work with the variadic template
> implementation of make_shared.
>
> Is it possible to make declaring friendship for make_shared and
> allocate_shared simpler? I thinking something like serialization does with
> friend class boost::serialization::access.

One possible solution that springs to mind is to make allocate_shared use
A::construct instead of doing placement new. You would then be able to make
the allocator a friend.

But please do submit a Trac ticket for this if you haven't already.

--
Peter Dimov
http://www.pdplayer.com 

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk