<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Jan 17, 2017 at 10:04 AM, Marcus D. Hanwell <span dir="ltr"><<a href="mailto:marcus.hanwell@kitware.com" target="_blank">marcus.hanwell@kitware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Tue, Jan 17, 2017 at 11:52 AM, David Gobbi <<a href="mailto:david.gobbi@gmail.com">david.gobbi@gmail.com</a>> wrote:<br>
> There's definitely a place for std::unique_ptr in VTK, however.  There's<br>
> lots of code that does local allocation with new/delete that could be<br>
> cleaned up.<br>
<br>
</span>Although vtkNew fills that role quite well too, and can be used with<br>
the other VTK smart pointers quite easily. For those that wanted to<br>
use unique_ptr it would be good to make that easy for them, but I<br>
wonder if tweaks to vtkNew would be preferable unless we make<br>
vtkObject derived classes behave more like normal C++ classes, i.e.<br>
removing implicit reference counting, allowing use of new/delete<br>
operators, managing memory using STL smart pointers.<br></blockquote><div><br></div><div>I wasn't even considering std::unique_ptr for VTK objects.  I was</div><div>more thinking of local allocation of memory for arrays and POD</div><div>objects or legacy methods that return an alloc'd "char *" that needs</div><div>to be deleted.</div><div><br></div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
> I believe that the main thing holding us back from more widespread use of<br>
> smart pointers is our rule for using forward declarations in VTK headers,<br>
> rather than including other headers.   And it's a rule that I don't want to<br>
> see changed.<br>
><br>
</span>I thought it was also the design of the vtkObject base class, and the<br>
implicit reference counting. Unless we make very significant changes<br>
to the vtkObject hierarchy/design it would seem like a terrible idea<br>
to pay for implicit reference counting and for C++11 smart pointers.<br>
The use of the object factory mechanism forcing the use of the static<br>
New() also adds some overhead.<br></blockquote><div><br></div><div>Here I meant that, if it wasn't for our "no unnecessary header rule",</div><div>we could use vtkSmartPointer to declare VTK class members and</div><div>hence avoid calling ->Delete() in the destructors.  I was using the</div><div>term "smart pointer" in the broader sense, i.e. I was including the</div><div>current vtkSmartPointer in the definition.  Apologies for the confusion.</div><div><br></div><div> - David</div><div> </div></div><br></div></div>