Re: [pygccxml-development] Parameter passing, ownership semantics
Brought to you by:
mbaas,
roman_yakovenko
|
From: Roman Y. <rom...@gm...> - 2007-02-19 19:04:11
|
Hi. Unfortunately I reproduced the error and was not able to fix it
:-(((((.
There is something I don't understand and I think this is Boost.Pythonbug.
I do made some progress.
1. When you derive Python class from a C++ one you have to define __init__
method, otherwise your code will not work:
class MyEvent(EventImpl):
def __init__( self ):
EventImpl.__init__( self )
def Notify(self):
print "Notify!"
2. I did small research for you. Read this post:
http://aspn.activestate.com/ASPN/Mail/Message/cpp-sig/1331901
and take a look on Boost.Python unit tests:
http://boost.cvs.sourceforge.net/boost/boost/libs/python/test/auto_ptr.cpp?view=markup
http://boost.cvs.sourceforge.net/boost/boost/libs/python/test/auto_ptr.py?view=markup
What I found is:
The ownership is really transfered. You can check this using simple
technique:
Add new function to EventImpl:
virtual std::string class_name() const { return "EventImpl"; }
Add free function:
std::string get_class_name( const std::auto_ptr<EventImpl>& e ){
if( e.get() ){
return e->class_name();
}
else{
return "no object";
}
}
You will get the answer "no object", after "Schedule" call.
So, may be you don't have to delete the Python object.
I will submit the bug to the Boost.Python mailing list, hope somebody will
be able to help.
--
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
|