[vtkusers] Delete problems

Utkarsh Ayachit utkarsh.ayachit at kitware.com
Fri Jul 14 16:21:38 EDT 2006


Smart pointers can be initialized in several ways:

Case 1:
vtkPlane* plane = vtkPlane::New();
vtkSmartPointer<vtkPlane> smartPlane = plane;
plane->Delete(); /// this is necessary since smart pointer assignment as
above increases the reference count.

Case 2:
vtkSmartPointer<vtkPlane> smartPlane = vtkSmartPointer<vtkPlane>::New();
// no Delete() needed in this case (rather delete should not be called,
otherwise the smartPlane will become a dangling pointer).

Case 3:
vtkPlane* plane = vtkPlane::New();
vtkSmartPointer<vtkPlane> smartPlane;
smartPlane.TakeReference(plane);
// Has same effect as Case 2, again, no Delete() needed.

Utkarsh.

Dominik Szczerba wrote:
> OK, but I still need New() don't I?
> 
> Sounds like a dream. Any drawbacks?
> 
> Thanks!
> Dominik
> 
> Mathieu Malaterre wrote:
> 
>> Dominik,
>>
>>     Another approach (if you are using VTK 5) is the use of
>> vtkSmartPointer. You don't need to call Delete, it is done for you.
>>
>> HTH
>> Mathieu
>>
>> David Cole wrote:
>>
>>> Any "New" calls should have corresponding "Delete" calls. Any
>>> "Register" calls should have corresponding "UnRegister" calls. And
>>> any reference loops need to be broken by setting one of the pointer
>>> variables involved to NULL or 0.
>>>
>>> Order is largely irrelevant except in the reference loop case.
>>> Sometimes it's important to know which part of a reference loop needs
>>> to go away first. Perhaps you need to force a bunch of objects to go
>>> away before a window is destroyed (for example).
>>>
>>> That's the beauty of reference counted systems: order doesn't matter
>>> as much as balance does...
>>>
>>> If you can't figure out where there's a missing Delete or UnRegister
>>> call, look for loops in pointer members (does your pipeline have a
>>> feedback loop??) It sometimes helps to draw a diagram of the
>>> pipeline. Or you could try simplifying it bit by bit and see when the
>>> leak goes away... Then start adding things back in until the leak
>>> comes back. That should point out where to look in the code...
>>>
>>>
>>> Hope this helps,
>>> David
>>>
>>>
>>> Dominik Szczerba wrote:
>>>
>>>> Hi,
>>>>
>>>> I have a quite complex pipeline with a few actors and filters. When
>>>> I clean up at the end I always get a non-zero reference count
>>>> somewhere (using C++). How do I robustly know in which order I
>>>> should Delete my components?
>>>>
>>>> PS. this is particularly annoying in combination matlab-vtk, as
>>>> matlab dies on any of such errors.
>>>>
>>>> regards,
>>>> Dominik
>>>> _______________________________________________
>>>> This is the private VTK discussion list. Please keep messages
>>>> on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>>> Follow this link to subscribe/unsubscribe:
>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>
>>> _______________________________________________
>>> This is the private VTK discussion list. Please keep messages
>>> on-topic. Check the FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>
> 




More information about the vtkusers mailing list