Boost logo

Boost :

From: Gregory Colvin (gregory.colvin_at_[hidden])
Date: 2003-08-26 12:36:01


On Tuesday, Aug 26, 2003, at 10:41 America/Denver, E. Gladyshev wrote:
> --- Gregory Colvin <gregory.colvin_at_[hidden]> wrote:
>> For shared_ptr the count is allocated by the following line in the
>> shared_count
>> constructor:
>>
>> new sp_counted_base_impl<P, D>(p, d);
>>
>> So it might be possible to make the allocation customizable by
>> specializing
>> sp_counted_base_impl.
>
> I think it would be great.

Then I suggest giving it a try.

> However there is another problem.
> You have to new your object.
> shared_ptr<MyClass> s( new MyClass );
>
> You cannot use allocator like you would expect:
> shared_ptr< MyClass, std::allocator<MyClass> > s;

Right. The shared_ptr design carefully avoids any extra class
template parameters, in favor of parameterizing the constructor.

My idea, if it works, would be to specialize sp_counted_base_impl
on the pointer type P, e.g. MyClass*, so you just write

    shared_ptr<MyClass> s( new MyClass );

or on the deleter type D, so you would write, e.g.

    shared_ptr<MyClass> s( new MyClass, MyDeleter<MyAllocator<MyClass>>
);

The idea is that your sp_counted_base_impl specialization provides
a custom operator new and operator delete that uses your allocator.

Alternatively, we could consider adding shared_ptr constructor that
takes an allocator argument.


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