Re: [pygccxml-development] Parameter passing, ownership semantics
Brought to you by:
mbaas,
roman_yakovenko
From: Gustavo C. <gjc...@gm...> - 2007-02-20 16:33:12
|
On 2/19/07, Roman Yakovenko <rom...@gm...> wrote: > > 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. I found this wiki with a possible solution for the problem: http://wiki.python.org/moin/boost.python/HowTo#head-927c9493ac51c81b3f2484e486d85567ff316c8a Unfortunately the provided code, after adaptions to my case, didn't even compile :-( -- Gustavo J. A. M. Carneiro "The universe is always one step beyond logic." |