[C++-sig] Re: Shared Pointers and Boost.Python

David Abrahams dave at boost-consulting.com
Sat Jul 24 16:39:50 CEST 2004

"Ralf W. Grosse-Kunstleve" <rwgk at yahoo.com> writes:

> --- Brian Hall <bhall at gamers-fix.com> wrote:
>> {
>> 	// Expose the State class to Python
>> 	class_<A>("A");
>> 	class_<B>("B", init<shared_ptr<A> >())
>> 		.def("getA", &B::getA);
>> }
> Try:
>         class_<A, shared_ptr<A> >("A");
>         class_<B, shared_ptr<B> >("B", init<shared_ptr<A> >())
> This should answer the first part of your question. I am not sure about the
> second part.

Actually, everything he did was fine.  Wrapping classes with
shared_ptr is almost completely pointless now, since any Python object
holding an X object can be converted to a shared_ptr<X>.  The
shared_ptr has a custom deleter that manages the owning Python object's

You might want to use register_ptr_to_python<shared_ptr<X> >() for
some shared pointers if you ever create them from C++ code, but in
this case it never happens so they can all be automatically converted
back into Python objects by (we just extract the owning Python object
from the deleter).

Dave Abrahams
Boost Consulting

More information about the Cplusplus-sig mailing list