<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
<!-- Software License, Version 1.0. (See accompanying -->
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
<html>
  <head>
    <meta name="generator" content=
    "HTML Tidy for Windows (vers 1st August 2002), see www.w3.org">
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <link rel="stylesheet" type="text/css" href="../boost.css">

    <title>Boost.Python - &lt;boost/python/manage_new_object.hpp&gt;</title>
  </head>

  <body>
    <table border="0" cellpadding="7" cellspacing="0" width="100%" summary=
    "header">
      <tr>
        <td valign="top" width="300">
          <h3><a href="../../../../index.htm"><img height="86" width="277"
          alt="C++ Boost" src="../../../../boost.png" border="0"></a></h3>
        </td>

        <td valign="top">
          <h1 align="center"><a href="../index.html">Boost.Python</a></h1>

          <h2 align="center">Header
          &lt;boost/python/manage_new_object.hpp&gt;</h2>
        </td>
      </tr>
    </table>
    <hr>

    <h2>Contents</h2>

    <dl class="page-index">
      <dt><a href="#classes">Classes</a></dt>

      <dd>
        <dl class="page-index">
          <dt><a href="#manage_new_object-spec">Class
          <code>manage_new_object</code></a></dt>

          <dd>
            <dl class="page-index">
              <dt><a href="#manage_new_object-spec-synopsis">Class
              <code>manage_new_object</code> synopsis</a></dt>

              <dt><a href="#manage_new_object-spec-metafunctions">Class
              <code>manage_new_object</code> metafunctions</a></dt>
            </dl>
          </dd>
        </dl>
      </dd>

      <dt><a href="#examples">Example</a></dt>
    </dl>
    <hr>

    <h2><a name="classes"></a>Classes</h2>

    <h3><a name="manage_new_object-spec"></a>Class
    <code>manage_new_object</code></h3>

    <p><code>manage_new_object</code> is a model of <a href=
    "ResultConverter.html#ResultConverterGenerator-concept">ResultConverterGenerator</a>
    which can be used to wrap C++ functions which return a pointer to an
    object allocated with a <i>new-expression</i>, and expect the caller to
    take responsibility for deleting that object.</p>

    <h4><a name="manage_new_object-spec-synopsis"></a>Class
    <code>manage_new_object</code> synopsis</h4>
<pre>
namespace boost { namespace python
{
    struct manage_new_object
    {
        template &lt;class T&gt; struct apply;
    };
}}
</pre>

    <h4><a name="manage_new_object-spec-metafunctions"></a>Class
    <code>manage_new_object</code> metafunctions</h4>
<pre>
template &lt;class T&gt; struct apply
</pre>

    <dl class="metafunction-semantics">
      <dt><b>Requires:</b> <code>T</code> is <code>U*</code> for some
      <code>U</code>.</dt>

      <dt><b>Returns:</b> <code>typedef <a href=
      "to_python_indirect.html#to_python_indirect-spec">to_python_indirect</a>&lt;T&gt;
      type;</code></dt>
    </dl>

    <h2><a name="examples"></a>Example</h2>

    <p>In C++:</p>
<pre>
#include &lt;boost/python/module.hpp&gt;
#include &lt;boost/python/class.hpp&gt;
#include &lt;boost/python/manage_new_object.hpp&gt;
#include &lt;boost/python/return_value_policy.hpp&gt;


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&lt;manage_new_object&gt;())
    class_&lt;Foo&gt;("Foo")
        .def("get_x", &amp;Foo::get_x)
        ;
}
</pre>
    In Python: 
<pre>
&gt;&gt;&gt; from my_module import *
&gt;&gt;&gt; f = make_foo(3)     # create a Foo object
&gt;&gt;&gt; f.get_x()
3
</pre>

    <p>Revised 
    <!--webbot bot="Timestamp" S-Type="EDITED" S-Format="%d %B, %Y" startspan -->
  13 November, 2002
  <!--webbot bot="Timestamp" endspan i-checksum="39359" -->
    </p>

    <p><i>&copy; Copyright <a href=
    "http://www.boost.org/people/dave_abrahams.htm">Dave Abrahams</a> 2002.</i></p>
  </body>
</html>

