I prefer vtkNew
when it is a local declaration as even with auto it is more compact, and more clearly conveys what I am doing:
vtkNew<vtkChartXY> chart;
versus
auto chart = vtkSmartPointer<vtkChartXY>::New()
I will admit to some bias, but think that it is both shorter and more expressive to use vtkNew in that context. If I am storing an instance I get, or working with it from a factory etc I would prefer vtkSmartPointer, i.e.
vtkSmartPointer<vtkChartXY> chart = chartFactory->createLineChart();
That is where I wonder if the vtkNew name is its downfall when using move semantics. We named it quite narrowly, and calling
vtkNew<vtkChartXY> chart = chartFactory->createLineChart();
Seems a little muddy, whereas vtkUniquePointer would be clearer in intent. I guess people can learn the nuance of what happened with vtkNew, but before it becomes too widespread it is worth considering whether the addition of something like vtkUniquePointer as a preferred factory method would be preferable to generalizing vtkNew.
When I proposed it and added it I wanted a simple equivalent to declaring a local instance.
vtkChartXY chart;
vtkNew<vtkChartXY> chart;
It was not named in the best way, or intended to fill the emerging use of unique_ptr with move semantics, factory method creation etc.