Bradley Froehle, 13.09.2012 18:22:
> On Thursday, September 13, 2012 8:59:43 AM UTC-7, Robert Bradshaw wrote:
>> On Thu, Sep 13, 2012 at 1:58 AM, Dag Sverre Seljebotn wrote:
>>> On 09/13/2012 07:26 AM, David Warde-Farley wrote:
>>>> On Thu, Sep 13, 2012 at 12:02 AM, Robert Bradshaw wrote:
>>>>
>>>>> It's storing borrowed references, so it'll work as long as something
>>>>> else in Python-space keeps it alive (which is, as evidenced, a rather
>>>>> precarious situation to be in).
>>>>
>>>> Indeed. I'm confused, though: in the example I've given, all 4 nodes
>>>> have references not only to each other but in the method scope of
>>>> test_dfs. It's unclear to me how or why they'd be garbage collected
>>>> (or decref'd to 0) before test_dfs() finished (since it's a call in
>>>> the last line of test_dfs where the crash takes place).
>>>
>>> If you want to do this, write an auto_ptr-like class, a class
>>> overloading
>>> operator* and operator->, let's call it pyptr, which has a PyObject*
>>> member but does INCREF on construction and DECREF on destruction.
>>>
>>> Then simply create std::vector<pyptr> rather than
>>> std::vector<PyObject*>.
>>>
>>> This *should* work, but to my knowledge there isn't any code available
>>> already, so please report back if you do this and perhaps we can include
>>> the pyptr class with Cython.
>>
>> I was about to suggest exactly this. Syntax is a good question though,
>> but perhaps "std::vector<object>" would be sufficient.
>
+1 for supporting this in Cython. Any volunteering to make this work as in
"std::vector<object>" is definitely appreciated.
Stefan