Boost logo

Boost :

Subject: Re: [boost] [shared_array] Why not in C++11 ?
From: Andrey Semashev (andrey.semashev_at_[hidden])
Date: 2013-07-08 02:56:46


On Mon, Jul 8, 2013 at 10:01 AM, Sid Sacek <ssacek_at_[hidden]> wrote:
> Now watch this:
>
> int my_buffer_size = 1234;
>
> auto buffer = boost::make_shared< unsigned char[] >( my_buffer_size );
>
> buffer[ index ] = something;
>
> int cap = buffer.capacity();
>
>
> Doesn't that feel the most natural ?

I agree that the syntax is simpler but that functionality exceeds that
of a pointer, IMHO. Next thing you want is begin()/end() and friends
and here we have a full fledged container interface. IIRC, shared_ptr
was designed to be as close to raw pointers as possible, but not
closer.

If you want a container, use one. Containers with shared storage would
be a nice addition to Boost, IMHO, but these should not abuse
shared_ptr interface. I would rather expect them to be based on
Boost.Intrusive and provide the natural container interface with some
extensions:

  shared_vector< int > svi;
  svi.push_back(10);
  shared_vector< int > svi2 = svi; // creates a ref-counted alias for svi
  shared_vector< int > svi3 = svi.clone(); // creates a deep copy of svi

  shared_map< string, string > smss;
  smss["aaa"] = "bbb";
  shared_map< string, string > smss2 = smss; // also an alias
  shared_map< string, string > subtree = smss.subtree("aaa"); //
creates an alias to the subtree

etc. The extensions are a just a thought.


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