Boost logo

Boost :

From: Peter Dimov (pdimov_at_[hidden])
Date: 2002-01-11 08:12:21

From: "Anthony Williams" <anthony_w.geo_at_[hidden]>
> From: "Andrei Alexandrescu" <andrewalex_at_[hidden]>
> Sent: Wednesday, January 09, 2002 11:37 PM
> > If you really want that, I think it's better to implement a limited
> > arithmetic than opening the floodgates by allowing conversions. There's
> > smart pointer arithmetic that doesn't make sense, for example
> of
> > unsigned integers. I haven't studied the problem too much yet, but I
> > you can implement arithmetic even without allowing automatic conversion.
> Indeed you can --- see my GenericPtr code and article from Overload
> (
> This enables pointer arithmetic on a GenericPtr without accidentally
> deallocating the array --- given a GenericPtr<int> "gpi" that points to an
> array, gpi+3 is a new GenericPtr<int> that also points to the array, and
> increments the reference count. Only when both pointers die is the array
> freed.

I find the idea of enabling pointer arithmetic for shared_array somewhat
questionable, but...

shared_array in

can be trivially extended to support it by adding

shared_array & operator+= (std::ptrdiff_t i)
    px += i;
    return *this;

Of course the BOOST_ASSERT(i >= 0); in operator[] will need to be removed.

Peter Dimov
Multi Media Ltd.

Boost list run by bdawes at, gregod at, cpdaniel at, john at