I use a mix of both forms, for different purposes.
For “normal” use, managing a pointer:
auto mapper = vtkSmartPointer<vtkPolyDataMapper>::New();
But also use without a managing pointer:
vtkSmartPointer<vtkRenderer> renderer;
...
if (some_condition)
{
renderer = vtkSmartPointer<vtkRenderer>::New();
syncRenderers->SetRenderer(renderer);
}
This allows some processes to have a VTK renderer. The ones without have a null pointer, but in all cases I don’t have to fiddle with a Delete
anywhere, since the vtkSmartPointer takes care of that for me.
/mark