Boost.Python - <boost/python/manage_new_object.hpp>

###  | # 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. All Rights Reserved.