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