[C++-sig] Re: Doubts with wrapping/using abstract bases.

Raoul Gough RaoulGough at yahoo.co.uk
Sun Aug 17 00:08:16 CEST 2003


Prabhu Ramachandran <prabhu at aero.iitm.ernet.in> writes:

>>>>>> "RG" == Raoul Gough <RaoulGough at yahoo.co.uk> writes:
>
> [snip explanation by RG of how test_holder.py works]
>
> Thanks for the explanation, it confirmed my understanding!

Well, I'm glad to hear that it made sense! I wasn't too sure about the
details myself, before I started my previous post.

>
>     RG> BTW, have you considered using boost::shared_ptr? I wouldn't
>     RG> trust std::auto_ptr with this kind of stuff. Also, storing raw
>     RG> pointers in a vector is just asking for trouble if you ask me.
>
> Dave enlightened me on the advantages of using boost::shared_ptr a
> month or so back.  Unfortunately I am not in a position to change my
> code at this time for two reasons: (a) I'll need to investigate if
> there is a performance hit for my kind of code (b) I don't have the
> time to change the interface in my code right now and carefully
> eliminate cyclic reference loops etc.

I see. Cyclic references would mean that you can't blindly replace
everything with shared_ptr, so you'd have to decide on using some kind
of weak pointer (e.g. raw pointers or boost::weak_ptr) at strategic
locations. BTW, I once wrote a checked pointer that detects mis-uses
in debug builds, but can be compiled away in release builds (similar
to an assert macro). Details at
http://home.clara.net/raoulgough/weak_ptr/, but it is more theoretical
exercise than production-strength code.

>
> Storing pointers in a vector is asking for trouble?  It might be true
> in general but I'd say using pointers carefully is not bad.  It has
> worked well for me so far.

Well, I was thinking specifically about mixing raw pointers in a
container with std::auto_ptr pointers elsewhere. I'd be worried about
the chances of an auto_ptr deciding to delete a pointer that is still
stored in the vector. That's apart from the usual risk of memory
leaks, of course. I'm not saying it can't be done, just that I
wouldn't find it particularly easy. OTOH, I can understand why
changing over wouldn't be feasible in an existing development process
- it might end up costing you more time to switch over than it would
save in debugging.

-- 
Raoul Gough
"Let there be one measure for wine throughout our kingdom, and one
measure for ale, and one measure for corn" - Magna Carta





More information about the Cplusplus-sig mailing list