[vtk-developers] Calling foo->Delete() automatically.
Brad King
brad.king at kitware.com
Wed May 15 16:53:24 EDT 2002
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
More information about the vtk-developers
mailing list