You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/*
tests/test_keep_alive.cpp -- keep_alive modifier (pybind11's version of Boost.Python's with_custodian_and_ward / with_custodian_and_ward_postcall)
Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
All rights reserved. Use of this source code is governed by a BSD-style license that can be found in the LICENSE file. */
#include "pybind11_tests.h"
class Child { public: Child() { py::print("Allocating child."); } ~Child() { py::print("Releasing child."); } };
class Parent { public: Parent() { py::print("Allocating parent."); } ~Parent() { py::print("Releasing parent."); } void addChild(Child *) { } Child *returnChild() { return new Child(); } Child *returnNullChild() { return nullptr; } };
test_initializer keep_alive([](py::module &m) { py::class_<Parent>(m, "Parent") .def(py::init<>()) .def("addChild", &Parent::addChild) .def("addChildKeepAlive", &Parent::addChild, py::keep_alive<1, 2>()) .def("returnChild", &Parent::returnChild) .def("returnChildKeepAlive", &Parent::returnChild, py::keep_alive<1, 0>()) .def("returnNullChildKeepAliveChild", &Parent::returnNullChild, py::keep_alive<1, 0>()) .def("returnNullChildKeepAliveParent", &Parent::returnNullChild, py::keep_alive<0, 1>());
py::class_<Child>(m, "Child") .def(py::init<>()); });
|