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.
		
		
		
		
		
			
		
			
				
					
					
						
							37 lines
						
					
					
						
							1.1 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							37 lines
						
					
					
						
							1.1 KiB
						
					
					
				| /* | |
|     example/example13.cpp -- keep_alive modifier (pybind11's version | |
|     of Boost.Python's with_custodian_and_ward / with_custodian_and_ward_postcall) | |
|  | |
|     Copyright (c) 2015 Wenzel Jakob <wenzel@inf.ethz.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 "example.h" | |
|  | |
| class Child { | |
| public: | |
|     Child() { std::cout << "Allocating child." << std::endl; } | |
|     ~Child() { std::cout << "Releasing child." << std::endl; } | |
| }; | |
| 
 | |
| class Parent { | |
| public: | |
|     Parent() { std::cout << "Allocating parent." << std::endl; } | |
|     ~Parent() { std::cout << "Releasing parent." << std::endl; } | |
|     void addChild(Child *) { } | |
|     Child *returnChild() { return new Child(); } | |
| }; | |
| 
 | |
| void init_ex13(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>()); | |
| 
 | |
|     py::class_<Child>(m, "Child") | |
|         .def(py::init<>()); | |
| }
 |