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 // MethodDeleter
template<typename Type, typename DestructorReturnType> template<typename Type, typename DestructorReturnType,
DestructorReturnType (Type::*Destructor)()>
struct MethodDelete struct MethodDelete
{ {
inline void operator()(Type *object) inline void operator()(Type *object)
{ {
if (fDestructor && object != NULL) if (object != NULL)
(object->*fDestructor)(); (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 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() : Base()
MethodDeleter(Destructor destructor) : Base()
{ {
Base::fDelete = destructor;
} }
template<typename Destructor> MethodDeleter(Type *object) : Base(object)
MethodDeleter(Type *object, Destructor destructor) : Base(object)
{ {
Base::fDelete = destructor;
} }
}; };