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

It allows to make typedef of pointer types and declaring pointers in headers.

Store of destructor function pointer in CObjectDeleter is no longer needed.

Change-Id: Ic629fd10b28b09f4190edf8ba6b911ca3108ab0e
Reviewed-on: https://review.haiku-os.org/c/haiku/+/3455
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 6f243905bf
commit 7d775e7925
+11 -21
View File
@@ -149,41 +149,31 @@ struct MemoryDeleter : AutoDeleter<void, MemoryDelete >
// CObjectDeleter
template<typename Type, typename DestructorReturnType>
template<typename Type, typename DestructorReturnType,
DestructorReturnType (*Destructor)(Type*)>
struct CObjectDelete
{
inline void operator()(Type *object)
{
if (fDestructor != NULL && object != NULL)
fDestructor(object);
if (object != NULL)
Destructor(object);
}
template<typename Destructor>
inline void operator=(Destructor destructor)
{
fDestructor = destructor;
}
private:
DestructorReturnType (*fDestructor)(Type*);
};
template<typename Type, typename DestructorReturnType = void>
template<typename Type, typename DestructorReturnType,
DestructorReturnType (*Destructor)(Type*)>
struct CObjectDeleter
: AutoDeleter<Type, CObjectDelete<Type, DestructorReturnType> >
: AutoDeleter<Type, CObjectDelete<Type, DestructorReturnType, Destructor> >
{
typedef AutoDeleter<Type, CObjectDelete<Type, DestructorReturnType> > Base;
typedef AutoDeleter<Type,
CObjectDelete<Type, DestructorReturnType, Destructor> > Base;
template<typename Destructor>
CObjectDeleter(Destructor destructor) : Base()
CObjectDeleter() : Base()
{
Base::fDelete = destructor;
}
template<typename Destructor>
CObjectDeleter(Type *object, Destructor destructor) : Base(object)
CObjectDeleter(Type *object) : Base(object)
{
Base::fDelete = destructor;
}
};