Boost logo

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] *
Boost support, enhancements, training, and commercial distribution

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