a bit more documentation on reference counting wrappers

This commit is contained in:
Wenzel Jakob 2015-10-18 15:38:50 +02:00
parent 7641c1dd11
commit 1853b65ff1

View File

@ -427,18 +427,27 @@ references to the object. When wrapping a type named ``Type``, the default
value of this template parameter is ``std::unique_ptr<Type>``, which means that value of this template parameter is ``std::unique_ptr<Type>``, which means that
the object is deallocated when Python's reference count goes to zero. the object is deallocated when Python's reference count goes to zero.
It is possible to switch to other types of smart pointers, which is useful in It is possible to switch to other types of reference counting wrappers or smart
codebases that rely on them. For instance, the following snippet causes pointers, which is useful in codebases that rely on them. For instance, the
``std::shared_ptr`` to be used instead. following snippet causes ``std::shared_ptr`` to be used instead.
.. code-block:: cpp .. code-block:: cpp
py::class_<Example, std::shared_ptr<Example>> obj(m, "Example"); py::class_<Example, std::shared_ptr<Example>> obj(m, "Example");
To enable transparent conversions for functions that take shared pointers as an
argument or that return them, a macro invocation similar to the following must
be declared at the top level before any binding code:
.. code-block:: cpp
PYBIND_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
.. seealso:: .. seealso::
The file :file:`example/example8.cpp` contains a complete example that The file :file:`example/example8.cpp` contains a complete example that
demonstrates how to work with custom smart pointer types in more detail. demonstrates how to work with custom reference-counting holder types in
more detail.
.. _custom_constructors: .. _custom_constructors: