[PyKDE] Re: clone member function deleting object

Paul F. Kunz Paul_Kunz at slac.stanford.edu
Mon Mar 14 15:46:13 GMT 2005

>>>>> On Mon, 14 Mar 2005 15:34:04 -0000 (GMT), "Phil Thompson" <phil at riverbankcomputing.co.uk> said:

>>>>>>> On Thu, 3 Mar 2005 09:17:07 -0000 (GMT), "Phil Thompson"
>>>>>>> <phil at riverbankcomputing.co.uk> said:
>>  Enabling tracing with SIP, I get the following when I call the
>> clone() member function in C++...
>> FunctionBase * sipFunctionBase::clone() const (this=0x083b0878)
>> python.clone 
>> sipFunctionBase::sipFunctionBase(const FunctionBase&) (this=0x0842b2d8) 
>> python.copy 
>> sipFunctionBase::~sipFunctionBase() (this=0x0842b2d8)

> This isn't very helpful unless it shows your Python debug print
> statements so that you can see the exact order that things are
> happening.

   The Python print statements are prefixed by `python.'

> Obviously it will do this if you aren't saving the result of the
> call to clone().

   I'm trying to save the results to clone() in C++.

>> What might I try next?

> Additional debug statements to see exactly which Python statement
> the dtor is being called from.

   As far as I can see, from the above...

- C++ calls virtual function clone() of the base class (FunctionBase)
- sipFunctionBase get called, it calls clone() of the Python function.
- clone of the Python function calls the "copy constructor".
- sipFunctionBase copy constructor gets called and it calls Python
  function's __init__ with two arguments
- Python __init__ prints "python.copy".
- sipFunctionBase destructor gets called, destroying the newly
  constructed object.

More information about the PyQt mailing list