[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