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:
@@ -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;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user