[vtkusers] Help with crashes in VTK

Jonathan Morra jonmorra at gmail.com
Wed Sep 7 12:10:20 EDT 2011


It sounds like I should be moving away from smart pointers for my threaded
application.  With that in mind, I was hoping you could answer this
question.  I want to store a bunch of vtkImageData's in a permanent storage.
 However, these can be made in a number of ways (from different filters, io,
my own special sauce), and I was wondering what the best way to get
information out of a vtk filter is.  For instance if I have

vtkImageData -> vtk filter -> temp vtkImageData -> vtk filter -> output

I've been using vtkImageData::New(), followed by
vtkImageData->DeepCopy(filter->GetOutput()).  I've been doing this cause I
notice that once I delete the filter the output no longer exists.

Is this the correct way to go about handling this situation?

On Tue, Sep 6, 2011 at 11:55 AM, David Gobbi <david.gobbi at gmail.com> wrote:

> On Tue, Sep 6, 2011 at 12:34 PM, Jonathan Morra <jonmorra at gmail.com>wrote:
>
>> This could make sense, I'm going to try and change all my method
>> signatures to pass around const references to vtkSmartPointers where
>> appropriate.  Do you know what happens to the reference count upon returning
>> a vtkSmartPointer?
>
>
>
> In VTK, smart pointers should only be used to store references, not to pass
> them.  VTK methods should take regular pointers as arguments.
>
> The general rules are:
>
> 1) Refcounts are not automatically incremented when objects are returned,
> i.e. when an object is returned to you, then you are just "borrowing" it.
>  If you need to own it for a while, then store it in a smart pointer.
>
> 2) Refcounts are not automatically incremented when objects are passed to a
> method.  If a method needs to own the object for a while, it should store it
> in a smart pointer.  All methods in the VTK libraries that need to own the
> objects that are passed to them will increment the refcount of those
> objects, either by storing it in a smart pointer or by calling Register() on
> it.
>
> There are a few very rare exceptions to rule #1, such as the NewInstance()
> method.
>
>  - David
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20110907/ff0471e5/attachment.htm>


More information about the vtkusers mailing list