[C++-sig] Ownership of a C++ object extended in Python using wrapper

Neal Becker ndbecker2 at gmail.com
Wed Mar 17 12:57:14 CET 2010


Alexandre Hamez wrote:

> 
> On 16 mars 2010, at 13:12, Neal Becker wrote:
> 
>> Alexandre Hamez wrote:
>> 
>>> Hi all,
>>> 
>>> I have a C++ library that needs to store in a hash map user's code, that
>>> is, Python-extended objects. To make the C++ interface available to
>>> Python, I use boost::python::wrapper, as stated in the tutorial
>>> 
>> 
(http://www.boost.org/doc/libs/1_42_0/libs/python/doc/tutorial/doc/html/python/exposing.html#python.class_virtual_functions).
>>> Because I store this extend objects, I need to tell Python that I've got
>>> a reference on these objects.
>>> A thread from 2007
>>> (http://mail.python.org/pipermail/cplusplus-sig/2007-March/011790.html)
>>> states there is a problem for this particular use case, but in the end,
>>> no solution is given. So my question is the following: as of today, what
>>> is
>>> the correct way to  tell Python we hold a reference to Python extend
>>> objects of C++ classes, using the boost::python::wrapper mechanism?
>>> 
>>> Thanks,
>>> ---------------------
>>> Alexandre Hamez
>> 
> 
> Thanks for answering so quickly.
>> I've use 2 methods:
>> 
>> 1) with_custodian_and_ward
> OK, I didn't think of this method. Seems a good way to do it.
> 
>> 2) boost::shared_ptr
> 
> For this point, do you mean you just take the objects that should seen
> they references increased by a shared_ptr? Just after having asked this
> question, I tried with this simple solution, and it seems to work. I hope
> there is no hidden potential crash :-)
> 
> Do you use these two methods conjointly in the same project? Or did you
> identify some use cases which favor a method rather the other one?
> 

Looking at some of my old code, I'd say I used one method or the other 
depending on the phase of the moon.  Haven't mixed them (sounds like a bad 
idea).



More information about the Cplusplus-sig mailing list