AutoDeleter: move destructor function in MethodDeleter from constructor to template argument

The same as CObjectDeleter.

Change-Id: I85c4cb3635f01f13e529ca087324cc2fcb42cfc0
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3456
Reviewed-by: Adrien Destugues <[email protected]>
This commit is contained in:
X512
2020-12-10 11:39:49 +00:00
committed by Adrien Destugues
parent 7d775e7925
commit aecba91311
+11 -21
View File
@@ -180,42 +180,32 @@ struct CObjectDeleter
// MethodDeleter
template<typename Type, typename DestructorReturnType>
template<typename Type, typename DestructorReturnType,
DestructorReturnType (Type::*Destructor)()>
struct MethodDelete
{
inline void operator()(Type *object)
{
if (fDestructor && object != NULL)
(object->*fDestructor)();
if (object != NULL)
(object->*Destructor)();
}
template<typename Destructor>
inline void operator=(Destructor destructor)
{
fDestructor = destructor;
}
private:
DestructorReturnType (Type::*fDestructor)();
};
template<typename Type, typename DestructorReturnType = void>
template<typename Type, typename DestructorReturnType,
DestructorReturnType (Type::*Destructor)()>
struct MethodDeleter
: AutoDeleter<Type, MethodDelete<Type, DestructorReturnType> >
: AutoDeleter<Type, MethodDelete<Type, DestructorReturnType, Destructor> >
{
typedef AutoDeleter<Type, MethodDelete<Type, DestructorReturnType> > Base;
typedef AutoDeleter<Type,
MethodDelete<Type, DestructorReturnType, Destructor> > Base;
template<typename Destructor>
MethodDeleter(Destructor destructor) : Base()
MethodDeleter() : Base()
{
Base::fDelete = destructor;
}
template<typename Destructor>
MethodDeleter(Type *object, Destructor destructor) : Base(object)
MethodDeleter(Type *object) : Base(object)
{
Base::fDelete = destructor;
}
};