On Thu, Jun 4, 2009 at 11:37 PM, Nicolas
Regnault<nicolas.regna...@lpnhe.in2p3.fr> wrote:
> Dear all:
>
> I am wrapping a library which relies heavily on boost smart pointers (mainly
> boost::shared_ptr< T >). In particular, many functions and methods have
> signatures like:
>
>   void my_func( const boost::shared_ptr< MyClass > & );
>
> Everything works well from within C++ programs. But I encounter a serious
> problem with the wrappers I have generated with py++. Indeed, when passing
> from python, something which wraps a "shared_ptr< MyClass >" to
> my_function(), the code within the function apparently gets a shared_ptr
> with a use_count equal to 1 (pointing to the same address), whatever the
> use_count of the shared_ptr passed to the function.
>
> I haven't been able to see what boost.python is doing in between, but
> something gets altered. Any idea of what is wrong with the wrappers ?

I am pretty sure, there is nothing wrong with the generated code. It
is pretty close to the code, you would write.

I think it happens, because Boost.Python is able to construct smart
pointer class instance( shared_ptr ) from an Python object( which
holds C++ class instance ) on the fly. It does so with custom deleter.

If your projects works a lot with boost::shared_ptr, may be it makes
sense for you to redefine HeldType (
http://www.boost.org/doc/libs/1_39_0/libs/python/doc/v2/class.html#HeldType
).


-- 
Roman Yakovenko
C++ Python language binding
http://www.language-binding.net/
_______________________________________________
Cplusplus-sig mailing list
Cplusplus-sig@python.org
http://mail.python.org/mailman/listinfo/cplusplus-sig

Reply via email to