[vtkusers] clarification on smart pointer usage

David Lonie david.lonie at kitware.com
Wed Jan 2 17:08:30 EST 2013


On Fri, Dec 28, 2012 at 11:57 PM, Richard Frank <rickfrank at me.com> wrote:

> Thanks- I'm doing that. Given two smart pointers allocated with ::New()
> macro, what should happen to the lhs on assignment?
>

If I remember correctly, this is what's happening:

>> vtkSmartPointer<vtkVolumeRayCastCompositionFunction> one =
vtkVolumeRayCastCompositionFunction::New();

one's reference count is 2 -- once from
vtkVolumeRayCastCompositionFunction::New(), and again from
vtkSmartPointer::operator=().

>> vtkSmartPointer<vtkVolumeRayCastCompositionFunction> two =
vtkVolumeRayCastCompositionFunction::New();

two's reference count is also 2.

>> one = two;

one should get decref'd to 1, while two gets increased to 3. Since one's
refcount never gets to zero, the destructor never gets called.

 Using the method David mentioned:

> vtkSmartPointer<vtkVolumeRayCastCompositionFunction> one =
> >  vtkSmartPointer<vtkVolumeRayCastCompositionFunction>::New();
>

one has 1 reference. You can check this by calling GetReferenceCount on the
pointers.

If you don't need to reassign the pointer, vtkNew is another useful smart
pointer class that you may find useful. This article provides a nice short
summary of these classes, and also vtkWeakPointer:

http://www.kitware.com/source/home/post/7

Hope this helps,
Dave
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20130102/9f1cdda5/attachment.htm>


More information about the vtkusers mailing list