<div dir="ltr"><div>At<br><br>   <a href="http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers#Pitfalls">http://www.vtk.org/Wiki/VTK/Tutorials/SmartPointers#Pitfalls</a><br><br></div>is this warning:<br><br>"If you create an object and then change where it is pointing, the reference count will be incorrect. e.g.

<div dir="ltr" class=""><div class=""><pre class="">vtkSmartPointer<span class=""><</span>vtkPolyData<span class="">></span> Polydata <span class="">=</span> vtkSmartPointer<span class=""><</span>vtkPolyData<span class="">></span><span class="">::</span><span class="">New</span><span class="">(</span><span class="">)</span><span class="">;</span>
Polydata <span class="">=</span> Reader<span class="">-</span><span class="">></span>GetOutput<span class="">(</span><span class="">)</span><span class="">;</span></pre></div></div>
<p>In this case, memory is allocated for Polydata, but then we change 
Polydata to point to the output of Reader rather than the memory we just
 allocated. Instead, we should have done simply:
</p>
<div dir="ltr" class=""><div class=""><pre class="">vtkPolyData<span class="">*</span> Polydata <span class="">=</span> Reader<span class="">-</span><span class="">></span>GetOutput<span class="">(</span><span class="">)</span><span class="">;</span></pre></div></div>
<p>It was not necessary to use a smart pointer because we did not actually create any new objects"</p><p>I fail to see how the refcount would be incorrect in the first approach. First a new object is created and its refcount increased to 1, then when Reader->GetOutput() (a raw pointer) is assigned to Polydata, wouldn't the smart pointer take care of decreasing the refcount for the object it already points to (so it would go to 0), before it starts managing the new pointer? Or is that not how it will work?</p><p>Elvis<br></p></div>