Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

Click here to view the latest version of this page.

Boost.Python

Header <boost/python/manage_new_object.hpp>

Contents

Classes
Class manage_new_object
Class manage_new_object synopsis
Class manage_new_object metafunctions
Example

Classes

Class manage_new_object

manage_new_object is a model of ResultConverterGenerator which can be used to wrap C++ functions which return a pointer to an object allocated with a new-expression, and expect the caller to take responsibility for deleting that object.

Class manage_new_object synopsis

namespace boost { namespace python
{
    struct manage_new_object
    {
        template <class T> struct apply;
    };
}}

Class manage_new_object metafunctions

template <class T> struct apply
Requires: T is U* for some U.
Returns: typedef to_python_indirect<T> type;

Example

In C++:

#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/python/manage_new_object.hpp>
#include <boost/python/return_value_policy.hpp>


struct Foo {
   Foo(int x) : x(x){}
   int get_x() { return x; }
   int x;
};

Foo* make_foo(int x) { return new Foo(x); }

// Wrapper code
using namespace boost::python;
BOOST_PYTHON_MODULE(my_module)
{
    def("make_foo", make_foo, return_value_policy<manage_new_object>())
    class_<Foo>("Foo")
        .def("get_x", &Foo::get_x)
        ;
}
In Python:
>>> from my_module import *
>>> f = make_foo(3)     # create a Foo object
>>> f.get_x()
3

Revised 13 November, 2002

© Copyright Dave Abrahams 2002.