From 7d775e7925da4ae6f4c90f451ec7b0f212fc6daa Mon Sep 17 00:00:00 2001 From: X512 Date: Fri, 4 Dec 2020 22:17:42 +0900 Subject: [PATCH] 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 --- headers/private/shared/AutoDeleter.h | 32 ++++++++++------------------ 1 file changed, 11 insertions(+), 21 deletions(-) diff --git a/headers/private/shared/AutoDeleter.h b/headers/private/shared/AutoDeleter.h index 24825dd765..2c2c9d5cf7 100644 --- a/headers/private/shared/AutoDeleter.h +++ b/headers/private/shared/AutoDeleter.h @@ -149,41 +149,31 @@ struct MemoryDeleter : AutoDeleter // CObjectDeleter -template +template struct CObjectDelete { inline void operator()(Type *object) { - if (fDestructor != NULL && object != NULL) - fDestructor(object); + if (object != NULL) + Destructor(object); } - - template - inline void operator=(Destructor destructor) - { - fDestructor = destructor; - } - -private: - DestructorReturnType (*fDestructor)(Type*); }; -template +template struct CObjectDeleter - : AutoDeleter > + : AutoDeleter > { - typedef AutoDeleter > Base; + typedef AutoDeleter > Base; - template - CObjectDeleter(Destructor destructor) : Base() + CObjectDeleter() : Base() { - Base::fDelete = destructor; } - template - CObjectDeleter(Type *object, Destructor destructor) : Base(object) + CObjectDeleter(Type *object) : Base(object) { - Base::fDelete = destructor; } };