Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2008-07-27 11:25:34


Daniel Frey:

> Hi,
>
> I have a question on make_shared. Consider a class which intends to
> force all instances to be handled via a shared_ptr. I used to do this by
> putting the ctors into the private section and adding static
> create()-methods in the public section. Example:
>
> class X
> {
> private:
> X( int, double );
>
> public:
> static shared_ptr<X> create( int i, double d )
> {
> return shared_ptr<X>( new X( i, d ) );
> }
> };
>
> Replacing the returned expression with make_shared<X>( i, d ) wouldn't
> work, since it requires a public ctor.

You should be able to make it work by making the appropriate make_shared
overload a friend:

 template< class T, class A1, class A2 >
 friend
 boost::shared_ptr< T > boost::make_shared( A1 const & a1, A2 const & a2 );


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