Boost logo

Boost Users :

Subject: Re: [Boost-users] boost::python::return_value_policy<bp::reference_existing_object>() is weakref in python?
From: Dave Abrahams (dave_at_[hidden])
Date: 2011-03-23 03:01:04


At Tue, 22 Mar 2011 02:40:41 -0500,
Thomas Rab wrote:
>
> --00151747c2d07665e8049f0d5c00
> Content-Type: text/plain; charset=ISO-8859-1
>
> On Tue, Mar 22, 2011 at 2:07 AM, Dave Abrahams <dave_at_[hidden]> wrote:
>
> > On Sat, Mar 19, 2011 at 12:39 AM, Thomas Rab <thomas.rab_at_[hidden]> wrote:
> > > ::Monocle::Collider * ( ::Monocle::Entity::* )( ::std::string const & )
> > )(
> > > &::Monocle::Entity::Collide )
> >
> >
> > I'm not sure of it, but the problem might be here. What happens if
> > you pass plain
> >
> > &::Monocle::Entitiy::Collide
> >
> > here instead (and why on earth are you using a C-style cast here in
> > the first place?
> > )
> >
> > The boost::python code was generated with py++ (should have mentioned
> that). I did as you suggested, but I get the same results, unfortunately.
> Here's what print collider yields in python: <weakref at 011DFCC0; to 'type'
> at 01173990 (life_support)>
>
> The other thing which may attribute to the problem is that Collider is
> noncopyable, but I would expect a different result if that was the case.

The only place weakrefs can come from in Boost.Python are from the use of one of these two policies:

  return_internal_reference
  with_custodian_and_ward

Since I don't see either one in your code, I can only conclude that
you're not looking where the problem is, and that (as usual with
Boost.Python) if you reduce your problem to an absolute minimal
reproducible case, you will solve it along the way. If you don't,
feel free to re-post that example so that I can debug it locally.

-- 
Dave Abrahams
BoostPro Computing
http://www.boostpro.com

Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net