* Prevent double deletion when setting to an object that is already set.
* Added Unset() and Delete() methods. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@11680 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -36,7 +36,7 @@ namespace BPrivate {
|
|||||||
|
|
||||||
// AutoDeleter
|
// AutoDeleter
|
||||||
|
|
||||||
template<typename C, typename Delete>
|
template<typename C, typename DeleteFunc>
|
||||||
class AutoDeleter {
|
class AutoDeleter {
|
||||||
public:
|
public:
|
||||||
inline AutoDeleter()
|
inline AutoDeleter()
|
||||||
@@ -56,8 +56,20 @@ public:
|
|||||||
|
|
||||||
inline void SetTo(C *object)
|
inline void SetTo(C *object)
|
||||||
{
|
{
|
||||||
fDelete(fObject);
|
if (object != fObject) {
|
||||||
fObject = object;
|
fDelete(fObject);
|
||||||
|
fObject = object;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Unset()
|
||||||
|
{
|
||||||
|
SetTo(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
inline void Delete()
|
||||||
|
{
|
||||||
|
SetTo(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline C *Detach()
|
inline C *Detach()
|
||||||
@@ -68,8 +80,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
C *fObject;
|
C *fObject;
|
||||||
Delete fDelete;
|
DeleteFunc fDelete;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user