[C++-sig] Instantiate a wrapped class in C++ and get the PyObject pointer
David Sveningsson
ext at sidvind.com
Mon Apr 23 23:22:36 CEST 2007
>
> Can you rephrase the question, please ? The underlaying pointer is owned
> by
> the boost::python::object instance, no matter how often you access it via
> the ptr() member function. Thus, if you want to hand a reference to it to
> someone else, you have to make sure the reference counter is appropriately
> incremented (Read boost.python's reference guide for more on the topic.)
>
PyObject* foo(){
boost::python::object bar = Fred(1,2,3); // <-- Stack allocated
return bar.ptr();
}
Since bar is allocated on the stack it will be destroyed once we return
from bar. Won't the pointer returned by ptr() only point to garbage after
returning?
PyObject* foo(){
boost::python::object bar = new boost::python::object(Fred(1,2,3));
return bar->ptr();
}
This time bar is allocated on the heap, so the pointer would still be
valid after returning from bar. But it will leak memory.
More information about the Cplusplus-sig
mailing list