> Robert wrote:
>> On May 7, 2009, at 2:03 AM, Dag Sverre Seljebotn wrote:
>>
>>>> OK, that changes everything. It still has its issues though. I'd
>>>> assume you'd try to delete the C++ object on deallocation? But what
>>>> if two distinct Python objects refer to the same C++ object? Or
>>>> the C+
>>>> + object (pointer) gets passed and stored in some library somewhere?
>>>
>>> All crossings between Cython and C++ would pass the object by
>>> value. You'd
>>> still need to use & to get a pointer, which would be similar to str ->
>>> char*.
>>>
>>>> I don't see a way to ensure a one-to-one relationship between C++
>>>> objects and Python objects--short of having stack allocated semantics
>>>> (i.e. it goes out of scope and is deconstructed when the function
>>>> exits) I don't see how one can automatically refcount C++ classes.
>>>
>>> I don't see the problem, sorry.
>>
>> I hadn't seen your retraction of "also changes b" so I thought you
>> were trying to pass things around by reference. Then what does
>
> That whole explanation was a mess, as my daughter waked up from her sleep
> at the time before I could improve it :-)
>
>> b = a
>>
>> actually do? Construct a new Python object, then copy by value into
>> it, and assign to be? So
>>
>> a is b
>>
>> is now False?
>
> I'll just forget about earlier explanations.
>
> But what I am advocating is to just have a regular Python reference
> transfer, no C++ operators involved.
>
> With that approach,
>
> cdef CppObject
> a += 2
>
> would mean the same as
>
> a = CppObject(a + 2)
>
> i.e. a new Python wrapper passing in a+2 as the argument. (C++ classes
> almost always has this "copy constructor", or else they can't be passed by
> value in the first place anyway).
>
> I am agreeing with Stefan that this is probably orthogonal. It is
> something you might want to support for C structs as well, so that
>
> cdef CWidget a, b
> b = a
> a.show_caption = True # also changes b
>
> would hold, i.e. an ability to give C structs Python semantics.

I keep making mistakes.

cdef CWidget a, b
# a and b are None
a = CWidget()
b = a
a.show_caption = True # also changes b

(Obviously you'd change the syntax for declaring the CWidget struct
heavily, probably call it something with class).

Dag Sverre

_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to