On Fri, May 04, 2012 at 01:42:11PM +0100, Phil Thompson wrote: > On Fri, 4 May 2012 14:33:10 +0200, Jens Thoms Toerring <j...@toerring.de> > wrote: > > I have a C++ class SIP-wrapped with the '/Abstract/' > > annotation, Thus Pyton just has a pointer to instances of > > this class (and ownership is with C++). Now, at a certaind > > point I would like to make the Python wrapper object point > > to a different instance (of the same class). Finding the add- > > ress of the Python object is simple using sipGetPyObject(). > > But is there some way make that Python object refer to a dif- > > ferent of my C++-objects? I guess that there's some pointer > > to my C++ object in that Python object that just need to be > > modified to point to the new instance of the C++ class. I've > > been going through all of the dicumentation several times but > > haven't found anything that looks as if would do something > > like that. And, of course, I wouldn't like to mess with un- > > documented features of the SIP-wrapper, resulting in every- > > thing breaking with the next SIP release;-) > > There is no supported way of doing this.
Thank you. Bit of a pity. Guess I'll have to find some other way of dealing with this... In case you're interested in the background here's an attempt to explain what I'm doing. Consider you have a class for dir- ectories and a class for files in that directory. Also assume that for some reasons (see below) the ownership must remain with C++. Now the directory class has a method to delete the directory. Thus the C++ object for the directory object as well all the objects for the files in the directory get de- leted. No problem with C++ - I simply document that if you have used the delete() method using the directory object and all the file objects derived from it can't be used anymore - C++ programmer are used to such things. But Python still has the wrapper objects with the pointers and if the user tries to use them afterwards the whole script will (in the best of all cases) crash. That doesn't look very "pythonic" to me - I guess a Python programmer will expect the script to abort with an exception, explaining about the errors of his way. Thus I would like to "redirect" the Python wrapper objects to a new C++ objects that, when used, throw an exception (and transfer ownership for them to Python, so they get deleted when Python garbage-collects the wrapper objects). If you wonder why I need to keep the ownership to C++ there are two reasons (the actual stuff I do isn't about directories and files, it's just simpler to visualize it that way): these objects have a lot of data (several hundreds of MB) and making copies of them simply would require too much memory. Moreover, under some circumstanes these objects must be immutable - and Python doesn't seem to have C++'s notion of const-ness. Best regards, Jens -- \ Jens Thoms Toerring ________ j...@toerring.de \_______________________________ http://toerring.de _______________________________________________ PyQt mailing list PyQt@riverbankcomputing.com http://www.riverbankcomputing.com/mailman/listinfo/pyqt