> 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
