added 'construct_custodian_for' and test #8
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
(note: I will update the documentation as well when this pull request gets accepted)
This pull request proposes a fix for the long-standing problem that
with_custodian_and_ward_postcall
doesn't work in connection withmake_constructor
(see e.g. https://mail.python.org/pipermail/cplusplus-sig/2007-June/012145.html).Consider the following class definitions:
and the corresponding boost::python glue code
In this code
#1
works as desired#2
works, but is a bit counter-intuitive because indexing suddenly starts at 1#3
causes an "argument index out of range" error#4
runs, but fails to establish the desired custodian-and-ward relationship (i.e.B3.a_content()
may crash because the containdA
instance can be deleted prematurely)The pull request introduces a new policy
construct_custodian_for
which solves problems#2-4
. It is used like this: