[C++-sig] Re: Allocating objects on the heap by default.

David Abrahams dave at boost-consulting.com
Mon Jul 7 21:57:21 CEST 2003


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

> Hi,
>
> Clarifying my own misunderstanding after a little more
> experimentation. :)
>
>>>>>> "PR" == Prabhu Ramachandran <prabhu at aero.iitm.ernet.in> writes:
>
>     >>> /auto_ptr without having to write a factory function like
>     >>> NewObj for every single class?
>
>     DA> class_<Obj, std::auto_ptr<Obj> >("Obj") ...
>     DA> ;
>     DA> does that.
>
>     PR> Neat.  I missed out looking at class_'s HeldType.  This solves
>     PR> most of my problems here.  Wonderful!
>
> [snip]
>
>     PR> Many thanks!  For now I'll add overloads to handle an
>     PR> auto_ptr<T> and later consider moving to shared_ptr.  I still
>     PR> need to get a handle on the performance of shared_ptr though.
>
> This approach of overloading the functions will not work with the
> HeldType being set to std::auto_ptr since Boost.Python will still call
> the raw pointer version.  

If you register the auto_ptr version last it will be preferred.

> So the way around this is to do as you originally said, wrap the add
> function to handle std::auto_ptr and hide the raw pointer interface
> when exposing it to Python.
>
>     PR> The only issue that I need clarification is on how Pyste
>     PR> should do handle this.  When use_auto_ptr(Obj) is specified
>     PR> should it register both the to_python converter and also pass
>     PR> the HeldType as auto_ptr or should the HeldType parameter be
>     PR> handled by something like handle_with_auto_ptr(Obj)?  I think
>     PR> the latter is better but am not quite sure.  I can submit a
>     PR> patch to handle this if this its OK.
>
> I clearly need to add a separate option because when I specify the
> HeldType a converter from std::auto_ptr seems already registeded for
> Obj.  

I'm not sure why that would be.

> Specifically I got the following error when I used use_auto_ptr
                                                     ^^^^^^^^^^^^
what's that?

> and also passed a HeldType parameter:
>
>   RuntimeError: trying to register to_python_converter for a type
>   which already has a registered to_python_converter
>
> I'll submit a patch to support using auto_ptr or shared_ptr as a
> HeldType sometime tommorow.


-- 
Dave Abrahams
Boost Consulting
www.boost-consulting.com





More information about the Cplusplus-sig mailing list