[vtk-developers] Python wrapping & factory methods

David Gobbi david.gobbi at gmail.com
Tue Apr 26 16:08:08 EDT 2011


Hi Tim,

All NewInstance() methods are wrapped the same way.  There isn't any
hinting mechanism to tell the wrappers that a new instance is being
created.  In fact the only way even a human programmer can tell is by
reading the documentation.

Since instance-creation methods are rare in VTK, I would be
comfortable hard-coding the few that exist into the wrappers.  For
instance, any method called NewInstance that returns an object can be
assumed to return a new instance (because honestly, why else would a
method have such a name?).

As a temporary and very dirty fix, you can use SetReferenceCount() to
avoid the memory leaks.

 - David

On Tue, Apr 26, 2011 at 1:39 PM, Timothy Shead <tshead at sandia.gov> wrote:
>
> I'm troubleshooting a reference-counting issue in the Python bindings for VTK - in a nutshell, the only way to instantiate vtkArray-derived classes from Python is through the vtkArray::CreateArray() static factory method (because vtkArray derivates are template classes).
>
> However, using vtkArray::CreateArray() from Python returns objects that have a reference-count of 2, because the Python wrapping code increments the reference-count of objects returned from "normal" class methods. This leads to annoying leaks when the program ends.
>
> From what I can see, there's a separate code path when instantiating VTK objects from Python.  I'm thinking that there must be other examples of factory methods in VTK, and that there must be some clean way of using them from Python?
>
> Thanks in advance,
> Tim
>
>
> --
> Timothy M. Shead
> Sandia National Laboratories
> 1461, Scalable Analysis and Visualization



More information about the vtk-developers mailing list