diff --git a/headers/private/shared/AutoDeleter.h b/headers/private/shared/AutoDeleter.h index 2d24368f2b..ac8a441e73 100644 --- a/headers/private/shared/AutoDeleter.h +++ b/headers/private/shared/AutoDeleter.h @@ -11,6 +11,7 @@ ArrayDeleter - deletes an array MemoryDeleter - free()s malloc()ed memory CObjectDeleter - calls an arbitrary specified destructor function + MethodObjectDeleter - calls an arbitrary object function in given struct ptr HandleDeleter - use arbitrary handle type and destructor function FileDescriptorCloser - closes a file descriptor, based on HandleDeleter */ @@ -218,6 +219,31 @@ struct MethodDeleter }; +// MethodObjectDeleter + +template +struct MethodObjectDelete { + inline void operator()(Type *object) + { + if (object != NULL) + ((**table).*Deleter)(object); + } +}; + +template +struct MethodObjectDeleter + : AutoDeleter > +{ + typedef AutoDeleter > Base; + + MethodObjectDeleter() : Base() {} + MethodObjectDeleter(Type *object) : Base(object) {} +}; + + // HandleDeleter struct StatusHandleChecker @@ -308,6 +334,7 @@ using ::BPrivate::ArrayDeleter; using ::BPrivate::MemoryDeleter; using ::BPrivate::CObjectDeleter; using ::BPrivate::MethodDeleter; +using ::BPrivate::MethodObjectDeleter; using ::BPrivate::HandleDeleter; using ::BPrivate::FileDescriptorCloser;