On 05/07/12 11:49, Jani Tiainen wrote:
> Hi,
>
> I'm new to python.boost library and I'm trying to use it to wrap a third
> party library. Everything else I've managed to get working - thanks to
> excellent library and lot of examples I've found around a net.
>
> Only thing I can't get working properly is instance ownership transfer
> in constructor.
>
> So classes in library are defined like follows:
>
> class Owner {
> ...
> }
>
> class Data {
> Data(Owner *owner); // <-- Here happens ownership transfer.
> }
>
>
> Python code is like follows:
>
> owner = Owner()
> data_1 = Data(owner)
> data_2 = Data(owner)
>
> So when Python script stops runnning it causes crash due the fact that
> I've data objects are automatically destroyed by Owner-class but Python
> deletes them by using Data-class destructor (which shouldn't happen ever).
>
If I understand you correctly then you want the owner object to remain
alive at least as long as data_1 and data_2? If so you could use
with_custodian_and_ward:
http://www.boost.org/doc/libs/1_49_0/libs/python/doc/v2/with_custodian_and_ward.html
For example something like the following should work:
namespace py = boost::python;
py::class_<
...
> my_class(
"Data",
"docstring.",
py::init< Owner * >( "Constructor." )[
py::with_custodian_and_ward< 1, 2 >()
]
);
_______________________________________________
Cplusplus-sig mailing list
[email protected]
http://mail.python.org/mailman/listinfo/cplusplus-sig