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/ |