[PyQt] Smartpointer to Python

Arve Knudsen arve.knudsen at gmail.com
Mon May 26 21:34:00 BST 2008


On 5/26/08, Phil Thompson <phil at riverbankcomputing.com> wrote:
> On Monday 26 May 2008 2:10:53 pm Arve Knudsen wrote:
>  > On Mon, May 26, 2008 at 2:37 PM, Phil Thompson
>  >
>  > <phil at riverbankcomputing.com> wrote:
>  > > On Monday 26 May 2008 1:10:11 pm Arve Knudsen wrote:
>  > >> Hi
>  > >>
>  > >> Reading the SIP documentation I can't find any info on how C++ objects
>  > >> are deleted (returned to the heap) from Python, only that their
>  > >> destructor is called.
>  > >
>  > > ...when the Python object is garbage collected and if the C++ object is
>  > > owned by Python.
>  >
>  > Yes, that much is clear.
>  >
>  > >> Does this mean that when returning new'ed
>  > >> pointers  to Python they should be managed by smartpointers? If so, is
>  > >> there any mechanism in SIP for treating smartpointers as objects of
>  > >> their managed type from Python?
>  > >
>  > > SIP effectively implements its own smartpointer mechanism - so long as
>  > > the C++ type has a virtual dtor and the C++ object is created from
>  > > Python.
>  >
>  > Could the SIP documentation be more clear about this? I can only see
>  > that it says that pointers to C structs will be free'ed, and that C++
>  > objects are destroyed. I need to make sure that C++ objects are
>  > deleted, not just destroyed.
>
>
> ...err, what's the difference?

Can you define "destroying" a C++ object as deleting it? When you say
destroy, I think of invoking its destructor. A destroyed object isn't
necessarily freed, and it's not immediately obvious how to free a
heap-allocated object in C++ (depends on how it's allocated).

Arve


More information about the PyQt mailing list