|
Boost : |
From: David Abrahams (dave_at_[hidden])
Date: 2002-11-17 20:19:18
"Peter Dimov" <pdimov_at_[hidden]> writes:
> From: "David Abrahams" <dave_at_[hidden]>
>
>> I could use something like a std::map< weak_ptr<>, PyObject* >, ...
>
> Yes, that's the "canonical" solution if you need to associate arbitrary data
> with objects managed by shared_ptrs.
In my case it's not arbitrary. It's /exactly/ the data which is used
to initialize the shared_ptr<>. Having to back through a map seems
somehow... perverse to me.
>> ... but that would be truly awful:
>>
>> 1. I would need to sweep the map of dead entries periodically
>> 2. It would incur a great deal of overhead
>> 3. It would be very complicated.
>
> I agree with (1), but (2) & (3) don't look obvious to me.
>
> Please think about this solution for a while to see whether it stays
> "truly awful". :-)
I first considered that approach shortly after Boost.Python v1 came
out, back in... well, it was several years ago. It's never been a
price I was willing to force on users. The picture hasn't changed
much, except that now I know I'm going to make deleters which hold
exactly the data I want.
I think I'd probably hack up a specialized shared_ptr<APrivateClass>
so that I could take advantage of the friend declarations in the
implementation before I'd use a map-based solution.
I realize my case is somewhat unusual. I can't really argue that it
warrants publicizing deleter introspection for everybody... however,
since we're all part of a big happy Boost family and I /could/ always
switch to a map if the shared_ptr implementation changes, how bad
would it be for me to use my hack?
-- David Abrahams dave_at_[hidden] * http://www.boost-consulting.com Boost support, enhancements, training, and commercial distribution
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk