* Copyright 2008, Haiku.
* Distributed under the terms of the MIT license.
*
* Authors:
* Michael Pfeiffer <laplace@users.sourceforge.net>
*/
#ifndef _AUTO_DELETE_H
#define _AUTO_DELETE_H
#include <stdlib.h>
Typical usage of this class:
AClass* Klass::Method(int arg) {
AutoDelete<AClass> variable(new AClass());
if (!IsValid(arg)) {
...
// AutoDelete automatically deletes the AClass object.
return NULL;
}
variable.Get()->MethodOfAClass();
// Use Release() to prevent deletion of AClass object.
return variable.Release();
}
*/
template <class Tp>
class AutoDelete {
private:
Tp* fObject;
bool fOwnsObject;
void Delete()
{
if (fOwnsObject) {
delete fObject; fObject = NULL;
}
}
public:
AutoDelete(Tp* object = NULL) : fObject(object), fOwnsObject(true) { }
virtual ~AutoDelete()
{
Delete();
}
void Set(Tp* object)
{
if (fObject == object) return;
Delete();
fOwnsObject = true;
fObject = object;
}
Tp* Get()
{
return fObject;
}
Tp* Release()
{
fOwnsObject = false;
return fObject;
}
void SetOwnsObject(bool ownsObject)
{
fOwnsObject = ownsObject;
}
};
#endif