[vtk-developers] Calling foo->Delete() automatically.

Bill Hoffman bill.hoffman at kitware.com
Tue May 21 13:31:21 EDT 2002


So, a smart pointer for VTK then....

vtkSmartPointer // calls Register and UnRegister in construction/deletion.

I guess the difference would be that we would only have one of these and it would
not have overloaded operators or be used like a pointer.


-Bill


At 01:15 PM 5/21/2002 -0400, Miller, James V (Research) wrote:
>Doesn't Delete() just all UnRegister() if it is not the last reference?
>Perhaps all that is needed is call Register() in the constructor of 
>vtkAutoDelete.
>
>-----Original Message-----
>From: Andy Cedilnik [mailto:andy.cedilnik at kitware.com]
>Sent: Tuesday, May 21, 2002 7:49 AM
>To: Brad King
>Cc: VTK Developers
>Subject: Re: [vtk-developers] Calling foo->Delete() automatically.
>
>
>I like the idea, but I see a small problem. There are several people out
>there who will look at this code briefly and will not understand where
>the pointers get deleted. They might assume that there is some garbage
>collection or something. 
>
>Another thing, this only works for New/Delete pair. What about register
>and unregister? 
>
>                        Andy
>
>On Wed, 2002-05-15 at 16:53, Brad King wrote:
>> Hello, all:
>> 
>> Recently I've been switching often between developing VTK classes and
>> developing projects that use smart pointers.  As a result, I've
>> created many leaks by forgetting to add "foo->Delete()" at all exit
>> points of a method.
>> 
>> One intention of C++'s automatic variable destruction feature is for
>> resource cleanup.  I propose the following short class for inclusion
>> in vtkSetGet or another high-level header:
>> 
>> class vtkAutoDelete
>> {
>> public:
>>   vtkAutoDelete(vtkObject* obj): Object(obj) {}
>>   ~vtkAutoDelete() { if(this->Object) { this->Object->Delete(); } }
>> private:
>>   vtkObject* Object;
>> };
>> 
>> An instance of this class exists only to call Delete() on an object at
>> all exit points in a method that owns a reference to that object.
>> Here is an example use:
>> 
>>   vtkFoo* foo = vtkFoo::New();
>>   vtkAutoDelete delete_foo(foo);
>>   ... setup foo ...
>>   if(error)
>>     {
>>     vtkErrorMacro(...);
>>     return 0; // foo automatically deleted.
>>     }
>>   ... use foo ...
>>   if(other_error)
>>     {
>>     vtkErrorMacro(...);
>>     return 0; // foo automatically deleted.
>>     }
>>   return 1; // foo automatically deleted.
>> 
>> This idea is similar to smart pointers, but it is completely optional and
>> requires no changes to existing code.  It is really a VTK version of the
>> C++ standard's "auto_ptr" class.
>> 
>> I'm interested in the list's comments.
>> 
>> -Brad
>> 
>> _______________________________________________
>> vtk-developers mailing list
>> vtk-developers at public.kitware.com
>> http://public.kitware.com/mailman/listinfo/vtk-developers
>> 
>
>
>_______________________________________________
>vtk-developers mailing list
>vtk-developers at public.kitware.com
>http://public.kitware.com/mailman/listinfo/vtk-developers
>_______________________________________________
>vtk-developers mailing list
>vtk-developers at public.kitware.com
>http://public.kitware.com/mailman/listinfo/vtk-developers 




More information about the vtk-developers mailing list