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
>> new sp_counted_base_impl<P, D>(p, d);
>> So it might be possible to make the allocation customizable by
> 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